AIX 6.x下find结合外部命令与管道查找含指定模式HL7文件的方法
AIX 6.x下find单行处理HL7文件的方案
原命令失效原因
你之前执行的命令失效是因为管道符|会被当前shell优先解析,不会作为-exec参数的一部分传递给find,实际执行逻辑变成了「find的输出直接传给grep」,和预期的每个文件转码后再匹配的逻辑不符。
正确单行命令
find . -type f -name "*.hl7" -exec sh -c 'hlcat "$1" | grep -q "pattern" && echo "$1"' _ {} \;
命令说明
- 通过
sh -c将转码+匹配的逻辑封装为子shell任务,管道符会在子shell内正常执行,不会被父shell提前解析 - 匹配到的文件名通过
{}作为$1参数传给子shell,$1外层加双引号,完全兼容包含括号、空格等特殊字符的文件名,不需要额外处理转义 - 用
grep -q做静默匹配,匹配成功后返回状态码0,触发&&后的逻辑输出对应文件名,效果和你预期的grep -l完全一致
注意事项
所有符号请使用英文半角格式,不要使用中文全角的引号、括号,避免执行报错。
内容的提问来源于stack exchange,提问作者George Jackson
相关产品推荐
相关产品推荐

