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>
我有多个这样命名的文件 --> 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>