OS X 環境下で以下のコマンドを実行すると、最終行が消去されずに出力されます。


最終的には、".js"のファイルについて、最終行を削除したいのですが、どのようなコードならば目的を達成できるでしょうか?

find ./ -name '*.js' -type f | xargs sed "$d"

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2016/02/16 01:25:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154スマートフォンから投稿

ポイント100pt

こんな感じで。

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'

というわけで、先に回答に書いたコマンドの例もこっそり直しておきました :-)

他2件のコメントを見る
id:a-kuma3

あ、ごめんなさい。
sed のコマンド $d をくくるのは、シングルクォートで。
ダブルクォートでくくると、d というシェル変数の展開と解釈されます。

2016/02/09 19:40:55
id:a-kuma3

ぼくの回答に書いた例もダブルクォートになっちゃってます X-|

2016/02/09 19:42:39
id:pyopyopyo No.2

回答回数377ベストアンサー獲得回数98

ポイント100pt

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 という名前で保存されます

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません