我有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个文件: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
for file in *; do sed -i "s/NODE/$(basename -s .txt file)_NODE/g" file; done
"
)代替单引号('
)使bash的可变内插(替换$
表达)。$(...)
执行任意的外壳命令,并插入结果。basename -s .txt
删除目录部分和文件名后缀.txt
。确切的命令不起作用,但基于您的评论,我修改了一下,这确实:'文件在*; do sed -i“s/NODE/$(basename -s .txt”$ file“)_ NODE/g”$ file; done' – aram
谢谢@sapanoia:
这工作:
for file in *; do sed -i "s/NODE/$(basename -s .txt "$file")_NODE/g" $file; done
参见:[Bash中的单引号和双引号之间的区别(https://stackoverflow.com/q/6697753/3776858) – Cyrus
您是否尝试过'set -x'或'echo sed -i's/NODE/$ file.NODE/g'file'进行调试? –