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

时间:2012-03-22 19:42:57

标签: file unix find line

我有一个文件(例如: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)并在此文件中删除我的行。但这不是我想要的。

3 个答案:

答案 0 :(得分:9)

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

假设有一个linux GNU sed

sed -i '/abcd=/d' /test.txt 

如果您使用的是OS-X,则需要

sed -i "" '/abcd=/d' /test.txt 

如果这些不起作用,那么使用带有条件mv的老派sed来管理你的tmp文件。

sed '/abcd=/d' /test.txt > test.txt.$$ && /bin/mv test.txt.$$ test.txt

注意:

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

通常你不需要'-e'

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

 abcd='abcd='
 sed -i "/${abcd}/d" /test.txt 

我希望这会有所帮助。

答案 1 :(得分:0)

这是使用grep的解决方案:

$ grep -v '^\$abcd=' test.txt

概念证明:

$ cat test.txt
a
b
ab
ac
$abcd=1
$abcd=2
$abcd
ab
a
$abcd=3
x

$ grep -v '^\$abcd=' test.txt
a
b
ab
ac
$abcd
ab
a
x

答案 2 :(得分:0)

据我所知,此命令可用于创建包含已删除行的其他文件。现在我们有了另一个文件,我们可以重命名该文件并删除原始文件(如果需要)。 你只需要这样做

       grep -v '^\$abcd=' test.txt > tmp.txt

现在tmp.txt将有内容

a
b
ab
ac
$abcd
ab
a
x

如果需要,可以在删除test.txt

后将其重命名为test.txt