ファイルの各行の最後にファイル名を追加するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/309604

  •  08-07-2019
  •  | 
  •  

質問

数百のファイルに対して以下を実行する必要があります。 ファイルの各行の末尾にファイルの名前(スペースを含む場合があります)を追加します。

これを行うには何らかの方法があるはずです:

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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top