我对终端和命令行相当陌生,据我所知,grep 似乎是搜索文件中特定文本字符串的正确工具。
我有一个包含许多巨大文本文件的文件夹,我只想保留每个文件中包含特定字符串的行(例如“/foobar”。,例如:
文件内容:
lorem ipsum
trololo /foobar abc
dolor sit
/foobar def
之后应为:
trololo /foobar abc
/foobar def
我猜这个命令看起来像这样
grep -wE "(/foobar)"
但我不知道如何告诉命令只保留这些行并对当前文件夹中找到的每个文件执行此操作。
你会用 grep 来做到这一点find
吗?或者 grep 有自己的功能吗?就像是:
find ./* -exec do grep stuff here
答案1
grep
只会查找与文件中的模式匹配的行,不会更改文件。您可以使用sed
查找模式并对文件进行更改:
sed '/\B\/foobar\b/!d' filename
将显示/foobar
文件中匹配的行。为了就地保存对文件的更改,请使用该-i
选项。
sed -i '/\B\/foobar\b/!d' filename
你也可以使用它find
:
find . -type f -exec sed -i'' '/\B\/foobar\b/!d' {} \;