在文件中搜索字符串并通过 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 脚本将其从该文件中删除 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
持续监视文件夹以将新创建 的文件从该文件夹上载到C#中的REST API