我有3个使用gsub的例子:
1
echo -e "A A\nB B\nC C" | awk '{gsub($(!/B/),"",$1); print $1 "\t" $2}'
A
B B
C
2
$ echo -e "A A\nB B\nC C" | awk '{gsub($(!/B/),"",$2); print $1 "\t" $2}'
A
B B
C
第3
$ echo -e "A A\nB B\nC C" | awk '{gsub($(!/B/),"",$0); print $1 "\t" $2}'
.
为什么在3例awk中没有打印出来? awk不应该打印吗?:
B B
请解释3个例子。
感谢您的帮助。
答案 0 :(得分:3)
关键是我:$(!/B/)
。很尴尬。这是什么意思(或者至少我猜它意味着什么)?
B
。如果匹配则返回1
,否则返回0
。$0
)或第一个字段($1
)。第三种情况还可以。
B
与指令匹配时gsub( $0, "", $0 )
为空行。这很清楚。B
不匹配时,指令为gsub( $1, "", $0 )
。因此,由于两个字母相同且gsub
逐行替换多次,因此会删除所有字符。添加另一个不同的角色,你会看到差异。 例如:
echo -e "A A 1\nB B 1\nC C 1" | awk '{gsub($(!/B/),"",$0); print $1 "\t" $2}'
产量:
1
1