我有一个大约5行的文件,我希望在每行的末尾打印文件名。
for file in *.txt
do
sed -i "1s/\$/${file%%.*}/" "$file"
done
上面的代码只在第一行写入文件名,我想在每一行都有文件名。
答案 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>