根据文本文件的名称查找和替换文本文件中的单词
Posted
技术标签:
【中文标题】根据文本文件的名称查找和替换文本文件中的单词【英文标题】:Find and Replace word in text files based on name of text file 【发布时间】:2017-11-18 07:39:02 【问题描述】:我有 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
【问题讨论】:
见:Difference between single and double quotes in Bash 您尝试set -x
或echo sed -i 's/NODE/$file.NODE/g' file
进行调试吗?
【参考方案1】:
for file in *; do sed -i "s/NODE/$(basename -s .txt file)_NODE/g" file; done
双引号 ("
) 代替单引号 ('
) 启用 bash 变量插值(替换 $
表达式)。
$(...)
执行任意 shell 命令并插入结果。
basename -s .txt
从文件名中删除目录部分和后缀.txt
。
【讨论】:
那个确切的命令不起作用,但根据您的评论,我做了一些修改,并且做到了:for file in *; do sed -i "s/NODE/$(basename -s .txt "$file")_NODE/g" $file; done
【参考方案2】:
谢谢@sapanoia:
这行得通:
for file in *; do sed -i "s/NODE/$(basename -s .txt "$file")_NODE/g" $file; done
【讨论】:
以上是关于根据文本文件的名称查找和替换文本文件中的单词的主要内容,如果未能解决你的问题,请参考以下文章