我有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)
任何人都可以建议,命令错了吗?
除非你有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)
我不知道perl是否是Solaris上的标准配置.如果是这种情况,您可以使用:
perl -ni -e 'if(!/test2/){print;}' myfile
Run Code Online (Sandbox Code Playgroud)