如何在Unix中查找和删除文件中的行?

Ada*_*dam 3 unix file line find

我有一个文件(例如:test.txt),这个文件包含一些行,例如一行是:abcd = 11但它可以是例如:abcd = 12数字不同但是abcd =在所有情况下都是相同的,那么任何人都可以命令我找到这条线并删除它吗?

我试过了:sed -e \"/$abcd=/d\" /test.txt >/test.txt但它删除了我文件中的所有行,我也试过了:sed -e \"/$abcd=/d\" /test.txt >/testNew.txt但是它不会从test.txt中删除行,它只会创建新文件(testNew.txt)并在此文件中删除我的行.但这不是我想要的.

she*_*ter 9

根据您在文本中的描述,这是一个应该有效的sed脚本的清理版本.

假设一个linux GNU sed

sed -i '/abcd=/d' /test.txt 
Run Code Online (Sandbox Code Playgroud)

如果你正在使用OS-X,那么你需要

sed -i "" '/abcd=/d' /test.txt 
Run Code Online (Sandbox Code Playgroud)

如果这些不起作用,那么使用sed带有条件mv的old-school 来管理你的tmpfiles.

sed '/abcd=/d' /test.txt > test.txt.$$ && /bin/mv test.txt.$$ test.txt
Run Code Online (Sandbox Code Playgroud)

笔记:

不确定你为什么这样做\"/$abcd=/d\",你不需要转义"字符,除非你用这个代码做的比你指示的更多(比如使用eval).把它写成"/$abcd=/d".

通常你不需要'-e'

如果你真的想使用'$ abcd,那么你需要给它一个值AND,因为你匹配字符串'abcd =',那么你可以做

 abcd='abcd='
 sed -i "/${abcd}/d" /test.txt 
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助.