如何从linux中的多个文件中删除特定行?

Posted

技术标签:

【中文标题】如何从linux中的多个文件中删除特定行?【英文标题】:How to delete a particular line from several files in linux? 【发布时间】:2015-04-24 21:44:56 【问题描述】:

我在子文件夹中有几个 html 文件,它们有一个冗余链接,例如:

<link rel="stylesheet" href="../demos.css">

我正在尝试在 linux 中使用以下命令从所有 html 文件中删除这一行:

find -name '*.html' -exec sed --in-place=.bak 'demos.css' "" ;

但这给了我以下错误:

find: missing argument to `-exec'

是的,当然,我已经检查了 *** 上与此相关的所有解决方案,但其中大多数都与单个文件有关,其余的都没有帮助。这段代码我做错了什么?

【问题讨论】:

查看***.com/questions/11245144/… 【参考方案1】:

find 缺少起始路径,sed 缺少d 命令,您需要在find 命令中转义分号:

find . -name '*.html' -exec sed -i.bak '/demos\.css/d' '' \;

或者更好:

find . -name '*.html' -exec sed -i.bak '/demos\.css/d' '' +

【讨论】:

在这两种情况下我都会收到类似sed: -e expression #1, char 2: extra characters after command 的错误。 在第一种情况下,我多次收到此错误,而在第二种情况下,我只收到一次。 还是同样的错误。不明白为什么,好像还行! 是的。与您发布的完全一样。 如果成功,请考虑接受答案。【参考方案2】:
for i in `find /www/htmls/ -name "*.html" 2>/dev/null`
do
    sed -i 's/^demos.css.*//' "$i"
done

【讨论】:

虽然这个代码块可能会回答这个问题,但您总是应该提供一些解释为什么它会这样做。【参考方案3】:

请试试这个:

for i in `find /www/htmls/ -name "*.html" 2>/dev/null`
do
    sed -i '/demos\.css/d' "$i"
done

【讨论】:

不会给出任何错误,但也不会更改 html 文件。 对不起,转义“.”

以上是关于如何从linux中的多个文件中删除特定行?的主要内容,如果未能解决你的问题,请参考以下文章

如何删除文件中某些行中的特定字符?

如何从 Android Studio 中的特定文件中删除所有评论? [复制]

使用 sed 从文本文件中删除特定的行号?

python从文件中删除特定行

从linux中的多个文件名中删除“-template”部分

如何复制或删除bash中的特定行并将它们创建到新文件中[重复]