0

何百ものファイルに対して次のことを行う必要があります: ファイルの各行の末尾にファイルの名前 (スペースが含まれる場合があります) を追加します。

これを行うにはいくつかの方法があるはずです:

sed -e 's/$/FILENAME/' *

ここFILENAMEで、現在のファイルの名前を表します。現在のファイル名を表す sed 変数はありますか? または、bash、awkなどを使用して別のソリューションを持っている人はいますか?

4

7 に答える 7

8

他の方法があると確信しています。私はperlを使用します:

perl -p -i -e 's/$/$ARGV/;' *
于 2008-11-21T18:04:11.770 に答える
4

sed の一部のバージョンは「--in-place」引数をサポートしているため、Tyler のソリューションを要約して

for i in * ; do 
  sed -e "s/\$/$i/" --in-place "$i" 
done
于 2008-11-21T18:01:02.947 に答える
4

あなたは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
于 2008-11-21T17:53:37.330 に答える
2
awk '{print $0,FILENAME}' > tmpfile
于 2008-11-21T18:11:51.910 に答える
0

これはあなたのために働くかもしれません:

printf "%s\n" * | sed 's/.*/sed -i "s|$| &|" &/' | bash
于 2012-03-18T17:24:13.230 に答える
0

BASH では、次のような効果があります。

for f in *; do echo $f >> $f; done
于 2008-11-21T17:54:49.450 に答える
0

多かれ少なかれ Tyler が提案した方法で、名前にスペースを許可するようにいくつかの変更を加えただけです。単行本を期待していたのに…

(
  OLDIFS=$IFS
  IFS=$'\n'
  for f in *
  do
    IFS=OLDIFS
    sed -e "s/\$/$f/" $f > tmpfile
    mv tmpfile $f
    IFS=$'\n'
  done
)
于 2008-11-21T18:09:24.553 に答える