【问题标题】:Replacement in a loop using find and sed使用 find 和 sed 在循环中替换
【发布时间】:2020-05-27 07:19:42
【问题描述】:

请给我建议

我需要浏览这个 $tmp 目录中的文件,并根据 sed 中描述的规则在行中进行替换

我对一个文件进行了训练,这个 sed 正常运行。 但是当我在 for 中执行替换时,我在输出中得到了一些废话

for file in $tmp/*.txt; do
    find $tmp/ -type f -name "*.txt" -exec sed -i -e 's/, /\n''/g; s/"//g; s/$/\x0A/; s/:[ ]/;/g;  s/\n''/;\n''/g; s/^[ t]*//' {} \;
done

我该如何解决? 谢谢……

向上

我做到了。

发现——真的没必要

@Rob Sweet谢谢!

【问题讨论】:

  • 除非我遗漏了一些你不需要 for 循环的东西。您实际上循环了两次,因为 find 命令的字面意思是“对 $tmp 中匹配“*.txt”的每个文件执行此操作。所以要么在循环中使用 sed 命令,要么摆脱 for 循环。
  • @RobSweet - 将此作为答案!获得积分! :-)

标签: linux for-loop sed find


【解决方案1】:

您不需要 for 循环和 find 命令。两者本质上都做同样的事情,即遍历 /tmp 中与 *.txt 匹配的所有文件。

【讨论】:

    【解决方案2】:

    当您不需要编辑 /tmp 子目录中的文件时,比一次性提供 sed 所有文件。

    sed -i your_command *.txt
    

    题外话:
    我不明白你的sed 命令。为什么是两个单引号?如果要替换换行符,请考虑选项-z

    【讨论】:

      猜你喜欢
      • 2019-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-04
      • 1970-01-01
      • 2019-02-19
      • 2015-06-12
      相关资源
      最近更新 更多