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

时间:2015-01-01 01:00:38

标签: bash sed find

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

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

因此,如果100.txt的文件内容是:

blahblahblah
blahblahblah
...

我需要输出:

blahblahblah 100 
blahblahblah 100
...

我需要使用sed执行此操作。

我当前的代码看起来像这样,但它很丑陋且不够简洁:

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

有可能以这种方式做到这一点吗?

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

2 个答案:

答案 0 :(得分:3)

您已经拥有的代码本质上是在bash中执行任务的最简单,最简单的方法。我要做的唯一更改是将-i传递给sed,假设您使用的是GNU sed(否则您需要将输出重定向到临时文件,删除旧文件,然后移动新文件)将文件放入其位置),并在$1为空时提供默认值。

dir="${1:-.}"

答案 1 :(得分:0)

以下命令行将找到所有文件,其文件名为只有扩展名为的数字,并在该文件的每一行末尾添加文件名(数字).. (我测试了一些文件

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

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

<directory path>替换为目录路径