2014-10-28 80 views
2

我知道如何使用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

如果你想改变的地方文件,用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/,这里的旧的为$,它与该行的末尾相匹配,新的为$ltr,这是一个空格和文件名的第一个字符。

    • "$f" tell sed顶层操作由f命名的文件。

2

怎么样纯bash的?

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