【问题标题】: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

【问题讨论】:

标签: bash for-loop sed quoting


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-07
    • 2018-08-18
    • 1970-01-01
    • 2015-12-23
    • 2017-11-04
    • 1970-01-01
    • 2011-02-09
    相关资源
    最近更新 更多