使用Sed替换字符串列

时间:2009-04-02 02:34:44

标签: linux unix sed replace

鉴于此数据

34 foo
34 bar
34 qux
62 foo1
62 qux
78 qux 

如果是“qux”,我想将第二列的字符串替换为“”。 所得:

34 foo
34 bar
34 
62 foo1
62 
78  

你如何用sed做到这一点?特别是数据非常大,有~10 ^ 7行

3 个答案:

答案 0 :(得分:15)

不会实际使用sed,因为那不是最好的工具。只要有人提到专栏,awk工具就是我的首选工具。

cat file | awk '$2 == "qux" { print $1 } $2 != "qux" { print $0 }'

或最简单的形式:

cat file | awk '{ if ($2 == "qux") {$2 = ""}; print }'

如果您必须使用sed

cat file | sed 's/  *qux *$//'

确保使用正确的空格(以上仅使用空格)。

答案 1 :(得分:3)

没有尾随空格:

sed 's/qux$//' < file

如果它必须在第二列(可能超过三列)中:

sed 's/\([0-9][  ]*\)qux\(.*\)/\1\2/'

(请注意,有一个文字标签和空格; sed与标签不匹配'\ t';

但是awk更适合表格数据:

awk '{ if ($2 == "qux") {$2 = ""; print} else { print }; }' < file

答案 2 :(得分:1)

 nawk '{ gsub( /qux/, " " ); print }' filename