【问题标题】:Shell script to append text to each file?将文本附加到每个文件的 Shell 脚本?
【发布时间】:2011-07-31 23:21:42
【问题描述】:

我有一个充满文本文件的文件夹。我需要将相同的文本块附加到每个文件(当然还要覆盖原始文件)。

我想知道正确的 Bash shell 语法是什么。我会用猫吗?

我已经完成了一些批处理脚本,但我不是 Bash 专家。任何建议表示赞赏。

【问题讨论】:

  • 覆盖还是追加,都是独占的?

标签: bash concatenation


【解决方案1】:

使用附加重定向。

for f in *.txt
do
  cat footer >> "$f"
done

【讨论】:

  • OP 声明“当然会覆盖原始文件”,所以我怀疑需要 '>' 而不是 '>>'
  • @wiliam,不,这个答案将页脚文本附加到每个文件。您不想清除每个文件的实际数据。
  • 其中footer 是一个包含必须附加到每个文件的文本块的文件。
  • 是的,伊格纳西奥说的。我想将新的文本文件 sn-p 附加到每个原始文件中,然后在附加后保存它们。谢谢。
【解决方案2】:

如果您需要通过脚本执行此操作,您可以使用 echo 和附加重定向将额外的文本放入文件中。

FILES=pathto/*
for f in $FILES ; do
    echo "#extra text" >> $f
done

【讨论】:

    【解决方案3】:
    sed -i.bak "$ a $(<file_block_of_text)" *.txt
    

    【讨论】:

      【解决方案4】:

      kurumi 答案的变体:

      sed -i.bak "\$aTEXTTOINSERT" *.txt
      

      更多详情请见SED: insert something to the last line?

      【讨论】:

        【解决方案5】:

        非常简单,对我很有效

        #!/bin/sh
        FILES="./files/*"
        
        for f in $FILES
        do
            echo '0000000' | cat - $f > temp && mv temp $f
        done
        

        【讨论】:

        • 在 bash 中你有 >> 管道操作符,你应该使用它
        猜你喜欢
        • 2015-07-14
        • 1970-01-01
        • 1970-01-01
        • 2013-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-21
        • 1970-01-01
        相关资源
        最近更新 更多