最終的には、".js"のファイルについて、最終行を削除したいのですが、どのようなコードならば目的を達成できるでしょうか?
find ./ -name '*.js' -type f | xargs sed "$d"
こんな感じで。
find ./ -name '*.js' -type f | xargs -n1 sed -i -e '$d'
find の -exec を使っても。
find ./ -name '*.js' -type f -exec sed -i -e '$d' {} \;
以下、参考URL。
"$d"
は、ダブルクォートでくくられているので、シェル変数 d の内容を展開する、というようにシェルに解釈されます。
d なんていう変数は設定していないはずなので、空文字として sed に渡されます。
$d を sed へのコマンドとして正しく渡すためには、シングルクォートで括ってあげる必要があります。
'$d'
というわけで、先に回答に書いたコマンドの例もこっそり直しておきました :-)
sed に "-i "オプションをつければOKです
find ./ -name '*.js' -type f | xargs sed -i .bak "$d"
これは sed の仕様で,たとえば
sed "$d" hogehoge.txt
を実行すると,結果は画面に表示されるだけで,hogehoge.txt の内容は書き換わりません
sed の"-i"オプションを使って
sed -i .bak "$d" hogehoge.txt
を実行すると hogehoge.txt の内容が書き換わります
さらに元のファイルは .bak が付与されて hogehoge.txt.bak という名前で保存されます
あ、ごめんなさい。
2016/02/09 19:40:55sed のコマンド $d をくくるのは、シングルクォートで。
ダブルクォートでくくると、d というシェル変数の展開と解釈されます。
ぼくの回答に書いた例もダブルクォートになっちゃってます X-|
2016/02/09 19:42:39