鉴于此数据
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 行
我实际上不会这样做,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 *$//'
确保您使用正确的空格(以上仅使用空格)。
没有尾随空格:
sed 's/qux$//' < file
如果它必须在第二列(可能超过三列):
sed 's/\([0-9][ ]*\)qux\(.*\)/\1\2/'
(请注意,有一个文字制表符和空格;sed 不匹配带有 '\t' 的制表符;
但 awk 更适合表格数据:
awk '{ if ($2 == "qux") {$2 = ""; print} else { print }; }' < file
nawk '{ gsub( /qux/, " " ); print }' filename