何百ものファイルに対して次のことを行う必要があります: ファイルの各行の末尾にファイルの名前 (スペースが含まれる場合があります) を追加します。
これを行うにはいくつかの方法があるはずです:
sed -e 's/$/FILENAME/' *
ここFILENAME
で、現在のファイルの名前を表します。現在のファイル名を表す sed 変数はありますか? または、bash、awkなどを使用して別のソリューションを持っている人はいますか?
他の方法があると確信しています。私はperlを使用します:
perl -p -i -e 's/$/$ARGV/;' *
sed の一部のバージョンは「--in-place」引数をサポートしているため、Tyler のソリューションを要約して
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 $0,FILENAME}' > tmpfile
これはあなたのために働くかもしれません:
printf "%s\n" * | sed 's/.*/sed -i "s|$| &|" &/' | bash
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
)