首页 > 解决方案 > 执行和 sed 命令

问题描述

问题是如何将以下命令组合在一行中并使用 exec。

find . -name '*.txt' -exec sh -c 'echo "$(sed -n "\$p" "$1"),$1"' _ {} \;

结果:所有 .txt 文件的路径和名称。

find . -name '*.txt' -exec sed -n '/stringA/,/stringB/p' {} \;

结果:所有 .txt 文件的开始和结束参数之间的行。

请求的结果:给我开始和结束参数之间的线。第一行必须包含 .txt 文件的路径和名称。

find . -name '*.txt' -exec ???? {} \;

./alpha/file01.txt

字符串A

第1行

线2

字符串B

./beta/file02.txt

字符串A

第1行

线2

字符串B

谢谢。T。

标签: shellsedexec

解决方案


将 的输出通过管道find传输到其他命令可能比使用-exec. 请尝试以下方法:

find . -type f -name '*.txt' -print0 | while read -r -d "" f; do echo "$f"; sed -n "/stringA/,/stringB/p" "$f"; done

产生:

./alpha/file01.txt
stringA
line1
line2
stringB
./beta/file02.txt
stringA
line1
line2
stringB
  • -print0中的选项find合并由空字符分隔的文件名。
  • -d ""中的选项read将输入拆分为空字符以正确再现文件名列表。
  • 然后我们可以在循环中引用$f文件名。while

希望这可以帮助。


推荐阅读