sed如何使用()和\ 1喜欢sed -r'/(0-9)*。* / s / \ 1/2 / g'

时间:2015-11-13 09:01:57

标签: bash sed

我想替换第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

2 个答案:

答案 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

无论文件中有多少列,它们都能正常工作。