[英]Regular expression to replace a word with another word on the same line unix
令A,B,C,D為單詞
輸入文件 :
..
A/B/C/D
W/B/C/Z
L/B/C/O
..
輸出文件:
..
A/B/C/A
W/B/C/W
L/B/C/L
..
僅在一行中存在/B/C/
分隔符的情況下,在同一行中用word A
替換word D
,對於其他行也是如此
任何sed/awk/perl
oneliner都能實現
這是一個awk
解決方案:
awk -F/ -v OFS=/ '$2=="B" && $3=="C" {$4=$1}1' input.txt
pearl.306> echo "A/B/C/D"|awk '{split($0,a,"/");print a[1]"/"a[2]"/"a[3]"/"a[1]}'
A/B/C/A
pearl.307>
另一種方法是:
pearl.309> echo "A/B/C/D" | awk -F"/" '{OFS="/"}{$NF=$1;print}'
A/B/C/A
pearl.310>
pearl.318> cat file1
A/B/C/D
W/B/C/Z
L/B/C/O
pearl.319> awk -F"/" '{OFS="/"}{$NF=$1;print}' file1
A/B/C/A
W/B/C/W
L/B/C/L
pearl.320>
你可以做:
sed -re 's/^([^/]*)(\/B\/C\/)([^/]*)$/\1\2\1/' file
演示:
$ cat file
A/B/C/D
W/B/C/Z
L/B/C/O
$ sed -re 's/^([^/]*)(\/B\/C\/)([^/]*)$/\1\2\1/' file
A/B/C/A
W/B/C/W
L/B/C/L
這可能對您有用:
sed 's|^\(\(.\)/B/C/\).|\1\2|' file
如果A/B/C/D
是真實單詞,例如wordA/wordB/wordC/wordD
,則:
sed 's/|^\(\([^/]*\)/wordB/wordC/\).*|\1\2|' file
這應該可以解決問題。 perl -p -e's / D / A / g'
in sed sed -e's / D / A /'
perl -pe 's#(/B/C/)(.*)#$1$`#' file
這應該工作+
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.