【问题标题】:How can I add a string to the beginning of each file in a folder in bash?如何在 bash 文件夹中的每个文件的开头添加一个字符串?
【发布时间】:2011-08-13 09:19:04
【问题描述】:

我希望能够在文件夹中每个文本文件的开头添加一个字符串。如何在 Linux 上使用 bash 做到这一点?

【问题讨论】:

    标签: linux bash file shell


    【解决方案1】:

    这样就可以了。如果您对每个文件执行相同的文本,则可以提高效率...

    for f in *; do 
      echo "whatever" > tmpfile
      cat $f >> tmpfile
      mv tmpfile $f
    done
    

    【讨论】:

    • $f 都应该是 "$f"。做一些错误检查也很好。此外,它还会更改原始文件的权限和所有权。
    【解决方案2】:

    这应该可以解决问题。

    FOLDER='path/to/your/folder'
    TEXT='Text to prepend'
    cd $FOLDER
    for i in `ls -1 $FOLDER`; do
         CONTENTS=`cat $i`
         echo $TEXT > $i  # use echo -n if you want the append to be on the same line
         echo $CONTENTS >> $i
    done
    

    如果您的文件很大,我不建议这样做。

    【讨论】:

    • 这是ls 示例的无用用法。使用 shell 扩展。
    【解决方案3】:

    你也可以这样做:

    for f in *; do
      cat <(echo "someline") $f > tempfile
      mv tempfile $f
    done
    

    它与第 1 篇文章没有太大区别,但确实展示了如何将 'echo' 语句的输出视为文件,而无需创建临时文件来存储值。

    【讨论】:

      【解决方案4】:

      您也可以在 1 个单一命令 中使用 sed 来完成此操作

      for f in *; do
        sed -i.bak '1i\
        foo-bar
        ' ${f}
      done
      

      【讨论】:

        【解决方案5】:

        你可以这样做没有循环和cat

        sed -i '1i whatever' *
        

        如果要备份文件,请使用 -i.bak

        或使用awk

        awk 'FNR==1{$0="whatever\n"$0;}{print $0>FILENAME}' *
        

        【讨论】:

        • 您的 sed comman 似乎只将字符串添加到第一个文件
        • 为什么这个答案在底部?!
        【解决方案6】:

        如果您愿意,可以使用 ed 命令来处理临时文件:

        for file in *; do
          (test ! -f "${file}" || test ! -w "${file}") && continue                # sort out non-files and non-writable files
          if test -s "${file}" && ! grep -Iqs '.*' "${file}"; then continue; fi   # sort out binary files
          printf '\n%s\n\n' "FILE:  ${file}"
          # cf. http://wiki.bash-hackers.org/howto/edit-ed
          printf '%s\n' H 0a "foobar" . ',p' q | ed -s "${file}"  # dry run (just prints to stdout)
          #printf '%s\n' H 0a "foobar" . wq | ed -s "${file}"     # in-place file edit without any backup
        done | less
        

        【讨论】:

          【解决方案7】:

          这是我最简单的方法。

          sed -i '1s/^/Text 添加然后新的file\n/' /file/to/change

          【讨论】:

            【解决方案8】:

            单行:rename '' string_ *

            【讨论】:

              【解决方案9】:

              这是一个例子:

              for f in *; 
              do
                  mv "$f" "whatever_$f"
              done
              

              【讨论】:

              • 我想格式化但不知道如何格式化,因为我是新来的。
              • 从这里开始:stackoverflow.com/help/formatting,当您输入答案或问题时,请参阅右栏,有格式化帮助
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2011-02-21
              • 2017-02-04
              • 1970-01-01
              • 1970-01-01
              • 2017-02-07
              • 1970-01-01
              相关资源
              最近更新 更多