我在目录中有文件,它们以前缀“ TESTFILE。”开头。
我该如何循环浏览带有该前缀的文件,并在这些文件中用另一个单词替换一个特定的单词?
我尝试了以下代码,它更改了目录中的所有文件,而不仅仅是具有该前缀的文件。我需要仅使用该前缀来更改文件。
for i in *TESTFILE.*; do sed -i 's/oldword/newword/g' * ;done
如果我的目录中有文件:
TESTFILE.file1
TESTFILE.file2
OTHER.file3
并且他们的身体包含: “让我们替换这个旧词”
在那些文件的正文中,我希望仅在以“ TESTFILE”开头的文件中将“ oldword”更改为“ newword”。
答案 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)