鉴于此数据
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行
答案 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