【发布时间】:2016-08-01 02:18:23
【问题描述】:
我正在尝试执行查找和替换功能,查找符合条件的文件,然后查找/替换其中的文本。
Find 语句(工作查找并返回文件列表):
find / -type f -name "*.properties" -o -name "*.xml" -not \( -path '/tmp/*' -o -path '/var/tmp/*' \)
Sed 查找/替换:
sed -i 's/find/replace/g' {} \;
放在一起:
find / -type f -name "*.properties" -o -name "*.xml" -not \( -path '/tmp/*' -o -path '/var/tmp/*' \) -exec sed -i 's/10\.32\.19\.156/10.32.19.165/g' {} \;
但是这似乎不起作用。删除一些 'find' 参数会使其工作,例如这工作:
find / -type f -name "*.properties" -exec sed -i 's/10\.32\.19\.156/10.32.19.165/g' {} \;
如何让 sed 使用扩展的“查找”参数? 目前,这两个“查找”语句在只有 2 个文件的测试文件夹中返回完全相同的结果:
find /var/tmp/ipreplace/ -type f -name "*.properties"
find /var/tmp/ipreplace/ -type f -name "*.properties" -o -name "*.xml" -not \( -path '/tmp/*' -o -path '/var/tmp/*' \)
【问题讨论】:
-
不确定为什么要在查找查询中使用 -not? find /var/tmp/ipreplace 将限制 find 仅在该目录中搜索,不需要其他参数。