【发布时间】:2019-02-06 22:35:49
【问题描述】:
问题是如何将以下命令组合成一行并使用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
第一行
第2行
字符串B
./beta/file02.txt
字符串A
第一行
第2行
字符串B
谢谢。 T.
【问题讨论】:
-
如果是我,我会编写一个脚本,将文件名列表(可能为空)作为参数,然后对每个参数进行处理:例如
for file in "$@"; do echo "$file"; sed -n '/StringA/,/StringB/p' "$file"; done。把它放在一个文件中——findit.sh。然后find . -type f -name '*.txt' -exec sh findit.sh {} +完成剩下的工作。如果您需要将StringA和StringB变成findit.sh的参数,就这样吧;要求它们作为前两个参数并相应地调整脚本。唯一的问题是名称findit.sh并在您动态创建时将其删除。