是否有类似于grep
's-m1
或awk
's nextfile
for 的选项或命令sed
,允许sed
在找到匹配项时立即停止处理当前输入文件(同时继续处理后续输入文件)?
例如:
find . -type f -exec sed -ns '/pattern/{<do stuff>; p; <next>}' {} +
其中将<next>
是停止读取当前输入文件的命令。 quit 命令 ( q
) 不合适,因为它只会导致sed
退出(放弃后续输入文件),因此每批输入文件最多会找到一个匹配项。
答案1
示例机智搜索和替换:
GNU sed
第一次出现模式后停止处理文件/输入(感谢sed
's-s
选项和find
's )。+
find . -type f -exec sed -ns '0,/pattern/s/patter/replacement/p' "{}" +
BSD sed
BSDsed
似乎缺乏-s
选择。所以我正在使用桑迪普的建议。
sed
第一次出现模式后退出,find
并将执行sed
下一个文件。
find . -type f -exec sed -n '0,/pattern/p;s/pattern/replacement/p;q' "{}" \;