如何在同一个文件中打印文件名?

时间:2018-04-10 10:34:52

标签: linux

我有一个大约5行的文件,我希望在每行的末尾打印文件名。

for file in *.txt
do
  sed -i "1s/\$/${file%%.*}/" "$file"
done

上面的代码只在第一行写入文件名,我想在每一行都有文件名。

2 个答案:

答案 0 :(得分:2)

  

以上代码仅在第一行写入文件名

这是1命令开头的sed:它是address,用于选择命令处理的行。

在您的情况下,s命令仅适用于第一行(因为命令前面有1)。从命令中删除1,它将应用于文件的所有行:

for file in *.txt
do
  sed -i "s/\$/${file%%.*}/" "$file"
done

https://www.gnu.org/software/sed/manual/sed.html了解sed的更多信息 鉴于您已经学习sed,在您的终端上输入man sed将刷新您对其命令的记忆。

答案 1 :(得分:1)

这有点hacky,但它确实有诀窍(bash):

filename=<filename>; len=$(wc -l $filename | cut -f1 -d' '); for i in $(seq $len); do echo $filename; done | paste $filename -

这个更干净,但需要安装python:

python -c "import sys; print('\n'.join(line.rstrip() + '\t' + sys.argv[1] for line in open(sys.argv[1])))" <filename>