设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
答案 0 :(得分:3)
这是一个awk
解决方案:
awk -F/ -v OFS=/ '$2=="B" && $3=="C" {$4=$1}1' input.txt
答案 1 :(得分:2)
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>
答案 2 :(得分:2)
你可以这样做:
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
答案 3 :(得分:2)
这可能对您有用:
sed 's|^\(\(.\)/B/C/\).|\1\2|' file
如果A/B/C/D
是真实的话,例如wordA/wordB/wordC/wordD
,然后:
sed 's/|^\(\([^/]*\)/wordB/wordC/\).*|\1\2|' file
答案 4 :(得分:1)
这应该可以解决问题。 perl -p -e's / D / A / g'
在sed sed -e's / D / A /'
中答案 5 :(得分:0)
perl -pe 's#(/B/C/)(.*)#$1$`#' file
这应该有效+