如何从unix或solaris中的文件中删除包含字符串的行

1 unix shell solaris sed

我有myfile如下

test1    
test2    
test3    
test4    
test5
Run Code Online (Sandbox Code Playgroud)

我想删除包含test2的行,所以我使用了如下命令,但不是只删除'test2'行,而是删除整个文件,fize-size变为零.

bash# cat /aaa/bbb/ccc/myfile | sed -e '/test2/ d'  > /aaa/bbb/ccc/myfile     
bash# ls -l total 0    
-rw-r--r--   1 root     root           0  3? 11 17:41 myfile
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议,命令错了吗?

gle*_*man 7

除非你有GNU sed(带有"-i"选项),并且你在Solaris上,所以你可能没有,你别无选择,只能写入临时文件:

sed -e '.....' infile > infile.tmp
mv infile.tmp infile
Run Code Online (Sandbox Code Playgroud)

更新:使用就地编辑文件 ed

printf "%s\n" 'g/test2/d' w q | ed infile
Run Code Online (Sandbox Code Playgroud)

  • 即使没有Gnu sed,"ed"也可以完成这项工作. (3认同)

mou*_*iel 5

我不知道perl是否是Solaris上的标准配置.如果是这种情况,您可以使用:

perl -ni -e 'if(!/test2/){print;}' myfile
Run Code Online (Sandbox Code Playgroud)