根据文本文件名查找和替换文本文件中的单词

时间:2017-06-15 17:45:54

标签: bash for-loop sed quoting

我有2个文件:A.txt,B.txt

这两个文件都包含字母NODE。

我想分别用A.txt和B.txt中的A_NODE和B_NODE替换每个文件中的NODE。

我知道有一个for循环和sed涉及,但无法弄清楚这个。有什么建议吗?

我在想:

for file in *; do sed -i 's/NODE/$file.NODE/g' file; done

2 个答案:

答案 0 :(得分:0)

for file in *; do sed -i "s/NODE/$(basename -s .txt file)_NODE/g" file; done
  • 双引号(")而不是单引号(')启用bash变量插值(替换$表达式)。
  • $(...)执行任意shell命令并插入结果。
  • basename -s .txt从文件名中删除目录部分和后缀.txt

答案 1 :(得分:0)

谢谢@sapanoia:

这有效:

for file in *; do sed -i "s/NODE/$(basename -s .txt "$file")_NODE/g" $file; done