递归搜索两个字符串之间的文本

递归搜索两个字符串之间的文本

我正在尝试递归搜索许多不同文件中两个字符串之间的文本。这两个(如下)在搜索包含 hit.txt 文件的一个文件夹时都有效,但我想从更高级别的目录中执行此操作,因此我没有在每个文件夹中单独运行其中任何一个。

awk '/aaa/,/bbb/' hits.txt  >> As.doc
sed -n '/aaa/,/bbb/p' hits.txt > As.doc

我尝试过各种 grep 命令来执行如下所示的递归搜索,但它只是创建一个空文档。

grep -r --include='*.txt' '/aaa/,/bbb/' > As.doc

我不确定什么最有效,或者我是否应该将 find 与上述之一一起使用。

答案1

grep实用程序没有行范围的概念,例如两者sedawk具有,因此表达式/aaa/,/bbb/不会执行您期望的操作(它只会匹配文字文本,包括斜杠和逗号,这大概就是为什么您会得到一个空的原因)结果)。

假设您显示的sedawk命令有效,并且您唯一需要帮助的是将这些命令.txt从当前目录递归地应用于名称以 结尾的文件。

find . -type f -name '*.txt' -exec awk '/aaa/,/bbb/' {} + >As.doc

或者

find . -type f -name '*.txt' -exec sed -n '/aaa/,/bbb/p' {} + >As.doc

这些命令将查找当前目录中或当前目录下的所有常规文件,并批量调用awksed实用程序。的输出find(这将是awk或的输出sed)被重定向到当前目录中调用的文件As.doc(如果该文件尚不存在,则该文件将被截断(清空)或创建)。

相关内容