与标题中一样 - 我需要查找并阅读具有特定名称的所有文件,检查第7行是否有特定模式,如果找到 - 打印路径或更换行。
我的管道或awk的exec输出有问题。
find . -name "meta" -exec awk 'NR==7 && /T/' {} \;
如何管道输出此命令,或在其上使用-exec?
答案 0 :(得分:2)
更改Awk脚本以打印文件名。
newRequest.setHeader('Authorization','XXX');
newRequest.setHeader('Content-Type','XXX');
newRequest.setHeader('CustomHeader','Customparameter');
或者使用退出代码将结果发送回find ... -exec awk 'NR==7 && /T/ { print FILENAME }' {} \;
find
如果文件太短,您需要注意具有相同的退出代码;这就是为什么我在发现匹配时使用略有反直觉的非零(失败)退出代码的原因。
如果你想用匹配替换该行,find ... -exec awk 'NR==7 { exit($0~/T/) }' () \; -o -ls
可能更容易和更便携,但GNU Awk也有sed -i
选项。
--inline
请注意,* BSD平台上需要find ... -exec sed -i '7s/.*T.*/foobar/' {} \;
,包括OSX(即sed -i '' '7s...
选项需要强制选项参数;传递空字符串以不备份文件。)