bash-使用sed将文件名附加到每个文件中的每一行

bash- use filename to append to every line in each file using sed

我有多个这样命名的文件 --> 100.txt、101.txt、102.txt 等。

这些文件位于一个目录中。对于这些文件中的每一个,我都需要将文件名中扩展名前的数字附加到文件中的每一行。

那么如果100.txt的文件内容是:

blahblahblah
blahblahblah
...

我需要的输出是:

blahblahblah 100 
blahblahblah 100
...

我需要使用 sed 来完成此操作。

我当前的代码看起来像这样,它很丑而且不太简洁。

dir=
for file in $dir/*
do
    base=$(basename $file)
    filename="${base%.*}" 
    sed "s/$/ $filename/" $file
done

这种方式可以吗?

find $dir/* -exec sed ... {} \; 

您已有的代码本质上是执行 bash 中任务的最简单、最短的方法。我要做的唯一更改是将 -i 传递给 sed,假设您使用的是 GNU sed(否则您需要将输出重定向到一个临时文件,删除旧文件,然后移动新文件文件到它的位置),并在 </code> 为空的情况下提供默认值。</p> <pre><code>dir="${1:-.}"

以下命令行将查找所有文件名 只有数字和扩展名 的所有文件,并在该文件的每一行末尾附加文件名(数字)。 .(我测试了几个文件

find <directory path> -type f -name '[0-9]*' -exec bash -c 'num=`basename "{}"|sed "s/^\([0-9]\{1,\}\)\..*//"`;sed -i.bak "s/.$/& $num/" "{}"' \;

注意:使用 sed 的命令行未在 OS X

中测试

用你的目录路径替换<directory path>