我想为sed运行一个inplace命令,只保留文件中的某些行。这与通常的用法不同,其中使用带有替换命令的sed -i
来替换文件行。例如,假设我有这个文件:
> cat file.txt
fox
rabbit
fox
fox
wolf
我想保持与狐狸匹配的线条。我的想法是:
sed -inr '/fox/p' file.txt
但是这不能按预期工作。我错过了什么?
答案 0 :(得分:2)
你错过了“-i”采用可选参数这一事实,因此-inr与-i -n -r不同,它与-i“nr”相同。尝试:
sed -i -nr '/fox/p' file
答案 1 :(得分:1)
试试这一行:
sed -i '/fox/!{s/.//g}' file
这将清空那些不匹配的行,而不是删除它们。所以fox
行留在他们的位置。
如果您只想删除那些不匹配的行:
sed -i '/fox/!d' file