• ベストアンサー

Linuxのsedコマンドについて

sedコマンドを使いIPアドレスを切り取りたいと考えています。 IPアドレスは4つの区切りで表示されますがこれをcutではなくてsedで処理したいと考えています。 この場合どのオプションを使えばよいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4901/10362)
回答No.6

> 例)91.384.203.39 - - [29 May/2003~] ~~ > となっていますが最初のカンマで区切られているIPアドレスを除きたいと考えています。 それはIPアドレスじゃないという突っ込みもありますが、それだけであれば、先頭から最初の空白までを削除すると言うことなので、 sed -e 's/^[^ ]* //' または空白を残すなら sed -e 's/^[^ ]* / /' で。

その他の回答 (5)

回答No.5

ファイルに上書きしたい場合は、オプション -i と -eをつけて以下のような形で使えば上書きできるかと思いますので、お試しください。 sed -i -e "s/[0-9]\+\(\.[0-9]\+\)\{3\}//g" test.txt

回答No.4

結果をさらに加工したいのであればパイプで渡しましょう cat ファイル名|sed 's/正規表現//g' | mail -s "sed result" パイプで渡せない場合もあります。その時は xargs -i の出番です。 例)ls で一覧調べて jpg と名のつくファイルをmvしたい ls |grep "jpg" |mv あれ!? ↑これはできません そんなときは ls |grep "jpg" | |xargs -i mv '{}' ../dust3 結果に対して毎行 mvを実行します。その際の一行は '{}' に入ります。 cat ファイル名|sed 's/正規表現//g' | xargs -i touch '{}' なんてやれば結果の名前をもったファイルがかずぶんできちゃいます。

回答No.3

例で出して頂いている、 91.384.203.39 - - [29 May/2003~] ~~ IPアドレスじゃないですよね・・・・ sed 's/\(\(1\?[0-9][0-9]\?\|2[0-4][0-9]\|25[0-5]\)\.\)\{3\}\(1\?[0-9][0-9]\?\|2[0-4][0-9]\|25[0-5]\)//g' 厳密にIPアドレスだけを正規表現で消去しています。 なので例示いただいた、「91.384.203.39」は私のでは消えません。

回答No.2

こんにちは。 以下のの内容がtest.txtに記載されていると仮定した場合、で回答させていただきます。 【test.txtのデータ】 91.384.203.39 - - [29 May/2003~] ~~ 191.384.203.39 - - [29 May/2003~] ~~ 291.384.203.39 - - [29 May/2003~] ~~ 91.384.203.39 - - [29 May/2003~] ~~ 91.384.203.39 - - [29 May/2003~] ~~ 91.384.203.39 - - [29 May/2003~] ~~ 91.384.203.39 - - [29 May/2003~] ~~ 【回答】 sed "s/[0-9]\+\(\.[0-9]\+\)\{3\}//g" test.txt 【実行結果】 - - [29 May/2003~] ~~ - - [29 May/2003~] ~~ - - [29 May/2003~] ~~ - - [29 May/2003~] ~~ - - [29 May/2003~] ~~ - - [29 May/2003~] ~~ - - [29 May/2003~] ~~ 参考になれば幸いです。

shiro857
質問者

補足

回答有難うございます。 sedの後に -eをつけてその後にスクリプトを書くことは可能ですか? sed -e の形で書き換えたいと思っといるのですが

回答No.1

入ってくる文字列と加工後の希望文字列の例を教えて下さい。

shiro857
質問者

補足

このような形になっています。 例)91.384.203.39 - - [29 May/2003~] ~~ となっていますが最初のカンマで区切られているIPアドレスを除きたいと考えています。 これはsedオプションのdでできるのでしょうか?

関連するQ&A