ファイルの各行の最後にファイル名を追加するにはどうすればよいですか?
質問
数百のファイルに対して以下を実行する必要があります。 ファイルの各行の末尾にファイルの名前(スペースを含む場合があります)を追加します。
これを行うには何らかの方法があるはずです:
sed -e 's/$/FILENAME/' *
FILENAME
は現在のファイルの名前を表します。現在のファイル名を表すsed変数はありますか?または、bash、awkなどを使用した別のソリューションがありますか?
解決
他の方法もあると思うので、perlを使用します:
perl -p -i -e 's/$/$ARGV/;' *
他のヒント
sedの一部のバージョンは、「-in-place」をサポートしています。引数を使用すると、タイラーのソリューションを凝縮できます
for i in * ; do
sed -e "s/\$/$i/" --in-place "$i"
done
bashスクリプトを使用して実行できます
for i in *
do
sed -e "s/\$/$i/" "$i"
done
ワンライナーバージョン:
for i in * ; do sed -e "s/\$/$i/" "$i" ; done
編集:ファイルの内容を名前を追加した新しい行で置換する場合は、次の操作を行います。
TFILE=`mktemp`
for i in *
do
sed -e "s/\$/$i/" "$i" > $TFILE
cp -f $TFILE "$i"
done
rm -f $TFILE
awk '{print <*>,FILENAME}' > tmpfile
BASHでは、次のことを実行します:
for f in *; do echo $f >> $f; done
Tylerが提案した方法の多かれ少なかれ、名前にスペースを使用できるようにいくつかの変更を加えました。私はワンライナーを望んでいました...
(
OLDIFS=$IFS
IFS=\n'
for f in *
do
IFS=OLDIFS
sed -e "s/\$/$f/" $f > tmpfile
mv tmpfile $f
IFS=\n'
done
)
これはあなたに役立つかもしれません:
printf "%s\n" * | sed 's/.*/sed -i "s|$| &|" &/' | bash
所属していません StackOverflow