shell - 执行和 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。
解决方案
将 的输出通过管道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
希望这可以帮助。
推荐阅读
- docker - 有什么方法可以在 dockerfile 中使用绑定挂载,或者必须使用 compose-file.yml
- javascript - 如何在点击反应时切换 tabPane 内容
- c - 如何使用 fread() 检测文件的结尾,然后在读取二进制文件时完成循环?(不要使用feof)——C语言
- docker - 无法使用机器人框架打开 chrome://webrtc-internals,页面显示为空白
- python - 在 Pandas 中将小数值转换为小数
- javascript - 如何找出并控制哪些元素获得滚动键盘事件?
- python - 单选按钮颜色添加颜色
- node.js - 使用循环对数据进行排序以找到离用户最近的餐厅
- embedded - 使用 mTouch 库在 PIC18F26K40 微控制器中实现电容式触摸的问题
- javascript - 如何解决 EPERM:webpack 命令中的操作不允许错误?