人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

●質問者: fm315
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● a-kuma3
●100ポイント

こんな感じで。

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'

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


fm315さんのコメント
回答、ありがとうございます! ただ、上記コマンドを実行した場合でも、最後の一行が消えてくれないのです...。

fm315さんのコメント
ただ、特定のファイルを指定して sed '$d' example.js と実行すると、最後の一行が消えてくれるのです...

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

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

2 ● pyopyopyo
●100ポイント

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

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ