让 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
..
仅当行中存在定界符且其他行同样明智时,将其替换为word D
同一word A
行 /B/C/
任何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'
在 sed sed -e 's/D/A/'
perl -pe 's#(/B/C/)(.*)#$1$`#' file
这应该工作+