【问题标题】:How do I add a header in each of my text files based on the first two words of the filename?如何根据文件名的前两个单词在每个文本文件中添加标题?
【发布时间】:2018-04-05 20:31:40
【问题描述】:

我有一个包含数百个带有数字的 .txt 文件的文件夹。这些文件以 word1_word2_word3_word4.txt 格式命名。每个 .txt 文件的单词都不同。

我想根据文件名为每个文本文件添加一个标题,这样标题的格式为:

'>c_word1_word2'

有没有办法使用命令行或 bash 脚本对所有 .txt 文件执行此操作?

【问题讨论】:

    标签: bash shell unix command-line


    【解决方案1】:

    中使用这个,使用一些parameter expansion builtins

    for i in *.txt; do j="${i%_*}"; sed "1i >c_${j%_*}" "$i"; done
    

    输出:

    $ ls -1
    word1_word2_word3_word4.txt
    word2_word2_word3_word4.txt
    word3_word2_word3_word4.txt
    $ cat word1_word2_word3_word4.txt
    foo
    bar
    base
    $ for i in *.txt; do j="${i%_*}"; sed -i "1i >c_${j%_*}" $i; done
    $ cat word1_word2_word3_word4.txt
    >c_word1_word2
    foo
    bar
    base
    $ 
    

    -i切换编辑文件就地

    【讨论】:

      【解决方案2】:

      这只是 Gilles 答案的替代方法,使用正则表达式

      for f in *.txt; do
          if [[ $f =~ ^([^_]+_[^_]+) ]]; then
              sed -i "1i>c_${BASH_REMATCH[1]}" "$f"
          fi
      done
      

      【讨论】:

        猜你喜欢
        • 2012-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多