3

while read l; do f=${l%% *} c=${l#* }; (test $f = $c && echo || echo $c) >> $f; done < hoge

bashの文字列置換は便利なんだけど、どうも末尾の空白文字を削ってるようにみえる

hoge% cat -A hoge
/etc/hosts 127.0.0.1^Ilocalhost$
/etc/hosts 127.0.1.1^Ihoge$
/etc/hosts $

1

ls -l | sed 1d | while read l; do f=${l##* }; rm $(basename $f); cp $f .; done

${変数名##<パターン>}は変数の文字列置換でbash系列で使えるみたい。正式名称は何なんだろう?便利なので良く使う
この手のは全部で4種類、#, ##, %, %% があって、それぞれ先頭からの最短マッチ、最長マッチ、末尾からの最短マッチ、最長マッチを削除する。パターンは正規表現ではない
他にもいろいろあって、bash substitutionでぐぐると出てくる。
単純な置換に限られるけどプロセスを起動しないぶん速い