- ベストアンサー
Linuxのsedコマンドについて
sedコマンドを使いIPアドレスを切り取りたいと考えています。 IPアドレスは4つの区切りで表示されますがこれをcutではなくてsedで処理したいと考えています。 この場合どのオプションを使えばよいのでしょうか?
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
> 例)91.384.203.39 - - [29 May/2003~] ~~ > となっていますが最初のカンマで区切られているIPアドレスを除きたいと考えています。 それはIPアドレスじゃないという突っ込みもありますが、それだけであれば、先頭から最初の空白までを削除すると言うことなので、 sed -e 's/^[^ ]* //' または空白を残すなら sed -e 's/^[^ ]* / /' で。
その他の回答 (5)
- cashmereRX
- ベストアンサー率26% (12/46)
ファイルに上書きしたい場合は、オプション -i と -eをつけて以下のような形で使えば上書きできるかと思いますので、お試しください。 sed -i -e "s/[0-9]\+\(\.[0-9]\+\)\{3\}//g" test.txt
- muuming2001
- ベストアンサー率23% (202/847)
結果をさらに加工したいのであればパイプで渡しましょう 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 '{}' なんてやれば結果の名前をもったファイルがかずぶんできちゃいます。
- muuming2001
- ベストアンサー率23% (202/847)
例で出して頂いている、 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」は私のでは消えません。
- cashmereRX
- ベストアンサー率26% (12/46)
こんにちは。 以下のの内容が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~] ~~ 参考になれば幸いです。
- muuming2001
- ベストアンサー率23% (202/847)
入ってくる文字列と加工後の希望文字列の例を教えて下さい。
補足
このような形になっています。 例)91.384.203.39 - - [29 May/2003~] ~~ となっていますが最初のカンマで区切られているIPアドレスを除きたいと考えています。 これはsedオプションのdでできるのでしょうか?
補足
回答有難うございます。 sedの後に -eをつけてその後にスクリプトを書くことは可能ですか? sed -e の形で書き換えたいと思っといるのですが