2017-06-15 85 views
0

我有2个文件:A.txt,B.txt根据文本文件的名称查找并替换文本文件中的单词

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

我想在每个A.TXT和B.txt与A_NODE和B_NODE文件分别替换节点。

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

我的想法是:

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

参见:[Bash中的单引号和双引号之间的区别(https://stackoverflow.com/q/6697753/3776858) – Cyrus

+0

您是否尝试过'set -x'或'echo sed -i's/NODE/$ file.NODE/g'file'进行调试? –

回答

0
for file in *; do sed -i "s/NODE/$(basename -s .txt file)_NODE/g" file; done 
  • 双引号(")代替单引号(')使bash的可变内插(替换$表达)。
  • $(...)执行任意的外壳命令,并插入结果。
  • basename -s .txt删除目录部分和文件名后缀.txt
+0

确切的命令不起作用,但基于您的评论,我修改了一下,这确实:'文件在*; do sed -i“s/NODE/$(basename -s .txt”$ file“)_ NODE/g”$ file; done' – aram

0

谢谢@sapanoia:

这工作:

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