【问题标题】:'Sed' not working on result of 'find' with multiple parameters'Sed' 无法处理具有多个参数的 'find' 的结果
【发布时间】: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 仅在该目录中搜索,不需要其他参数。

标签: linux bash sed find


【解决方案1】:

我猜你的find 命令中使用-path 参数是错误的。 请尝试以下操作:

find / -not \( -path '/tmp' -prune \) -not \( -path '/var/tmp' -prune \) -type f -name "*.properties" -o -name "*.xml" -exec sed -i 's/10\.32\.19\.156/10.32.19.165/g' {} \;

看this post参考

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-24
    • 2018-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    • 1970-01-01
    • 2023-04-07
    相关资源
    最近更新 更多