【问题标题】:How do I loop through files in a directory with a specific prefix and replace a specific word in those files?如何遍历具有特定前缀的目录中的文件并替换这些文件中的特定单词?
【发布时间】:2019-10-01 22:23:15
【问题描述】:

我在一个目录中有文件,它们以前缀“TESTFILE”开头。

我如何遍历带有该前缀的文件,并在这些文件中将特定单词替换为另一个单词?

我已经尝试了以下代码,它更改了目录中的所有文件,而不仅仅是带有该前缀的文件。我只需要使用该前缀更改文件。

for i in *TESTFILE.*; do sed -i 's/oldword/newword/g' * ;done

如果我的目录中有文件:

TESTFILE.file1
TESTFILE.file2
OTHER.file3

他们的身体包含: “让我们替换这个旧词”

在这些文件的正文中,我希望仅在以“TESTFILE.”开头的文件中将“oldword”更改为“newword”。

【问题讨论】:

    标签: bash sed scripting


    【解决方案1】:

    问题在于您的循环体忽略了循环变量 (i),而只是在所有内容 (*) 上运行 sed

    修复:

    for i in TESTFILE.*; do sed -i 's/oldword/newword/g' -- "$i"; done
    

    甚至只是

    sed -i 's/oldword/newword/g' TESTFILE.*
    

    如果您没有太多文件无法放入单个命令行。

    【讨论】:

      【解决方案2】:

      这是一个强大的版本,可以处理文件名中的空白字符:

      #!/bin/bash
      while IFS= read -r -d '' file; do
          sed -i 's/oldword/newword/g' "$file"
      done < <(find . -type f -name 'TESTFILE.*' -print0)
      
      猜你喜欢
      • 2019-02-21
      • 1970-01-01
      • 2023-03-16
      • 2019-01-16
      • 1970-01-01
      • 2019-02-25
      • 1970-01-01
      • 1970-01-01
      • 2014-05-20
      相关资源
      最近更新 更多