在文件中搜索字符串并通过 Shell 脚本将其从该文件中删除 [重复]

Posted

技术标签:

【中文标题】在文件中搜索字符串并通过 Shell 脚本将其从该文件中删除 [重复]【英文标题】:Search a string in a file and delete it from this file by Shell Script [duplicate] 【发布时间】:2011-07-31 20:50:04 【问题描述】:

我想从文件中删除包含特定字符串的行。如果不使用awk,我怎么能做到这一点?我尝试使用sed,但无法实现。

【问题讨论】:

【参考方案1】:

应该这样做:

sed -e s/deletethis//g -i *
sed -e "s/deletethis//g" -i.backup *
sed -e "s/deletethis//g" -i .backup *

它将在所有文件 (*) 中将所有出现的“deletethis”替换为“”(无),并就地编辑它们。

在第二种形式中,可以更安全地编辑模式,它可以备份任何修改过的文件,方法是使用“.backup”作为后缀。

第三种形式是sed 的某些版本喜欢它的方式。 (例如 Mac OS X)

man sed 了解更多信息。

【讨论】:

我认为引用表达式通常是一个更好的主意,此外我想指出 -i.bak 语法,其中 sed 创建具有给定扩展名的备份文件。 IE。也可以是-i.backup... @STATUS 你是对的,有些版本的 sed 实际上需要后缀。 这不起作用。这会删除字符串。我想删除包含此字符串的行 它确实有效。它回答了你的问题。如果你想简单地删除包含某个字符串的行,你可以使用grep -v 这在busibox中工作,而sed -i '/pattern/d'没有(删除所有行,而不是字符串)【参考方案2】:
sed -i '/pattern/d' file

使用 'd' 删除一行。这至少适用于 GNU-Sed。

如果您的 Sed 没有选择就地更改文件,也许您可​​以使用中间文件来存储修改:

sed '/pattern/d' file > tmpfile && mv tmpfile file

直接写到源代码通常是行不通的:sed '/pattern/d' file > file,所以如果您怀疑,请在尝试之前复制一份。

【讨论】:

这是对原始问题的正确答案。出于安全原因,您可以使用-i.bak 而不是仅使用-i 来创建原始文件的备份。 这不适用于busybox的sed,它删除了所有行而不是字符串,@mvds 回答有效 @danigosa:嗯,这就是为什么 mvds 的答案是错误的,问题是要删除一行,而不是字符串。阅读问题,阅读投票最多的答案中的美德评论。 不适用于 macOS。不得不做sed 's/pattern//g' @pedromss:那是删除一个单词,而不是包含该单词的行。【参考方案3】:

试试 vim 方式:

ex -s +"g/foo/d" -cwq file.txt

【讨论】:

以上是关于在文件中搜索字符串并通过 Shell 脚本将其从该文件中删除 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

LVS健康检测脚本分享

持续监视文件夹以将新创建 的文件从该文件夹上载到C#中的REST API

shell脚本--在带本月日期的文件中搜索包含某个关键字,并返回含有关键字的文件

如何将字典列表保存到文件中?

在浏览器上打印字符串,shell 脚本

使用Google应用脚本从PDF到文本转换获取文本