如何遍历目录中带有特定前缀的文件并替换这些文件中的特定单词?

时间:2019-05-14 20:23:38

标签: bash sed scripting

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

我该如何循环浏览带有该前缀的文件,并在这些文件中用另一个单词替换一个特定的单词?

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

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

如果我的目录中有文件:

TESTFILE.file1
TESTFILE.file2
OTHER.file3

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

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

2 个答案:

答案 0 :(得分:1)

问题在于循环体忽略循环变量(i),而仅对所有内容(sed)运行*

修复:

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

甚至只是

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

如果没有太多文件可容纳在单个命令行中。

答案 1 :(得分:0)

这是一个可靠的版本,它与文件名中的空白字符一起使用:

#!/bin/bash
while IFS= read -r -d '' file; do
    sed -i 's/oldword/newword/g' "$file"
done < <(find . -type f -name 'TESTFILE.*' -print0)