如何将文件名中的字符附加到终端文件的每一行的末尾?

时间:2014-10-28 22:52:57

标签: bash awk sed

我知道如何使用Python做到这一点,但我想学习如何使用awk或sed或任何最好的命令行方法。我的文件名看起来像

A1.txt
A2.txt
...
B99.txt
B100.txt

每个文件包含一行。我想将文件名中的字母附加到行尾。然后文件的内容如下:

a one file contents A
a two file contents A
...
b ninety nine file contents B
b one hundred file contents B

2 个答案:

答案 0 :(得分:2)

如果你想更改文件,sed的-i选项很方便:

for f in *.txt; do ltr=${f:0:1}; sed -i "s/$/ $ltr/" "$f" ; done

说明:

  • for f in *.txt

    这将启动当前目录中所有.txt个文件的循环。

  • ltr=${f:0:1}

    这将从文件名

  • 中提取第一个字符
  • sed -i "s/$/ $ltr/" "$f"

    这将用f命名的文件中的每一行的末尾替换为空格和文件名的第一个字符。更详细:

    • -i告诉sed进行更改。

    • s/$/ $ltr/是替换命令。格式为s/old/new/,其中,old为$,在行的末尾匹配,new为$ltr,即空格和文件名的第一个字符。< / p>

    • "$f"告诉sedf命名的文件的顶级操作。

答案 1 :(得分:2)

纯粹的bash怎么样?

for file in *.txt; do
    IFS= read -r line < "$file"
    printf '%s %s\n' "$line" "${file::1}" > "$file"
done