如何从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中的多个文件中删除特定行?的主要内容,如果未能解决你的问题,请参考以下文章