我正在尝试递归搜索许多不同文件中两个字符串之间的文本。这两个(如下)在搜索包含 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
实用程序没有行范围的概念,例如两者sed
和awk
具有,因此表达式/aaa/,/bbb/
不会执行您期望的操作(它只会匹配文字文本,包括斜杠和逗号,这大概就是为什么您会得到一个空的原因)结果)。
假设您显示的sed
和awk
命令有效,并且您唯一需要帮助的是将这些命令.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
这些命令将查找当前目录中或当前目录下的所有常规文件,并批量调用awk
或sed
实用程序。的输出find
(这将是awk
或的输出sed
)被重定向到当前目录中调用的文件As.doc
(如果该文件尚不存在,则该文件将被截断(清空)或创建)。