如果$ 4是一个
,我想删除文本文件中的行123 34 A 0
23 45 A 1
36 5 A 36
176 3 A 1
期望的输出
123 34 A 0
36 5 A 36
我需要就地编辑。我怎么能用awk或sed做到这一点?
答案 0 :(得分:5)
在awk
:
awk '$4 != 1'
这在sed
是可行的,但足够困难,我不打扰:
sed '/^[^ ][^ ]* *[^ ][^ ]* *[^ ][^ ]* *1 *$/d'
或者,如果你有GNU sed
:
sed -r '/^[^ ]+ +[^ ]+ +[^ ]+ +1 *$/d'
答案 1 :(得分:2)
使用GNU sed
-i
进行就地编辑,-r
进行扩展正则表达式的一种方式:
sed -ri '/^\S+\s+\S+\s+\S+\s+1( |$)/d' file
如果您迫切需要就地编辑,您可能还想尝试使用perl
自动分割功能。代码也更具可读性和可移植性:
perl -i -ane 'print if $F[3] != 1' file
结果:
123 34 A 0
36 5 A 36
答案 2 :(得分:1)
只是为了与众不同......
$ ed << \eof
g- 1$-d
w
q
eof
答案 3 :(得分:0)
使用awk
awk '{if($4 != 1 ) print $0}' temp.txt