我想替换第2列的第3列。
但首先我想知道我们可以在地址中使用()吗? 像
sed -r '/(0-9)* .*/s/\1/C/g'
如果不能 什么是sed的解决方案可以做到这一点
before
cat test
1 2 3
1 2 2
2 2 3
2 2 2
after
cat test
1 2 3
1 2 C
2 2 3
2 2 C
答案 0 :(得分:0)
使用AWK
$ awk '$2==$3{$3="C"};1' test
1 2 3
1 2 C
2 2 3
2 2 C
使用Perl:
perl -nae '@F[2]="C" if @F[2]==@F[1]; print(join(" ", @F), "\n")' test
^^^ Evaluates first argument as perl code
|| Split lines into array @F
| Read line for line
答案 1 :(得分:0)
(0-9)*
不是您正在寻找的正则表达式。使用sed也不正确。请阅读正则表达式教程和sed的手册页。
你不能让s/../../
中的sed引用地址中的组。您必须在s/.../.../
如果你想改变最后一个字段取决于最后一个字段的值,awk更容易(更简单):
awk '$NF==$(NF-1){$NF="C"}7' file
使用sed也可以:
sed -r 's/(\S+)\s\1$/\1 C/' file
无论文件中有多少列,它们都能正常工作。