我有多个这样命名的文件 - > 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 ... {} \;
答案 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>
替换为目录路径