如何在 OS X 上使用终端查找文件中的文本并仅保留相应的匹配行?

如何在 OS X 上使用终端查找文件中的文本并仅保留相应的匹配行?

我对终端和命令行相当陌生,据我所知,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' {} \;

相关内容