【问题标题】:bash scripting: change certain lines in a text file based on it's locationbash 脚本:根据其位置更改文本文件中的某些行
【发布时间】:2014-07-25 11:44:51
【问题描述】:

我有一堆按照命名模式 x1、x2、x3、x4 ... 的子文件夹,每个子文件夹都包含相同的 script.sh 文件。如果我想编写一个脚本,将该脚本文件的某些行(例如第 2 行)从 x1 更改为文件夹的名称,该怎么办?

例如,在 x5 文件夹中,script.sh 的第二行应该是 x5,而在 x39 文件夹中,script.sh 的第二行应该是 x39。

谢谢!

【问题讨论】:

  • 您要替换还是插入该行?
  • @BroSlow 这不是一个很好的副本。用文件夹名称替换是一项重要的附加要求。
  • @tripleee 也许不是完全重复,但我猜至少有 10 个很好的问题可以满足另一个“要求”。

标签: bash scripting


【解决方案1】:

这个将子文件夹名称插入到每个script.sh的第二行

find . -name script.sh | while read f
do
    dir=$(basename $(dirname "$f"))
    sed -i "2 i $dir" "$f"
done

要替换第 2 行,请使用 c 而不是 i

find . -name script.sh | while read f
do
    dir=$(basename $(dirname "$f"))
    sed -i "2 c $dir" "$f"
done

【讨论】:

  • 这有很多问题。不要这样做 for f in $(find) (请参阅 this 以获得更好的语法。此外,您没有检查子文件夹名称(因此这可能会更改意外文件,并且我不确定子文件夹 == 递归)。另外,请引用您的变量,无论是在子shell中还是它们本身。
  • @BroSlow,谢谢!我已根据您的建议更新了答案。如果您发现任何其他问题,请编辑
  • 它实际上并没有替换第二行,而是在第二行插入。你能告诉我怎么换吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-08
  • 2021-10-05
  • 2019-08-05
  • 1970-01-01
  • 2015-01-15
  • 2014-03-21
  • 1970-01-01
相关资源
最近更新 更多