プロが教えるわが家の防犯対策術!

有識者の知恵をお借りしたいのですが、以下のようなエラーログの出力結果が
あった場合、AAAAA01が含まれる文字列の括弧の中の部分をsedで抜き出したい
場合はどのような指定をすればよいでしょうか。
括弧の中の文字はランダムで毎回同じとは限らない場合の指定方法をご教示下さい。

AAAAA00 AAAAA01 AAAAA02 AAAAA03 AAAAA04
AAAAA05 AAAAA06 (AAAAA07)

BBBBB00 BBBBB01 BBBBB02 BBBBB03 BBBBB4
BBBBB05 BBBBB06 (BBBBB7)

CCCCC00 CCCCC01 CCCCC02 CCCCC03 CCCCC4
CCCCC05 CCCCC06 (CCCCC7)

以下のコマンドで問題なく処理されますでしょうか。
sed -n "s/.*AAAAA01.*\((,)*\)\$

よろしくお願い致します。

A 回答 (5件)

「AAAAA01が含まれる文字列の括弧の中の部分をsedで抜き出したい」という目的を忠実に実行するなら


sed -ne '/AAAAA01/{s/^.*\([^)]*\).*$/\1/; p}'
とかかなぁ?
    • good
    • 0
この回答へのお礼

Tacosan様

回答をいただきましてありがとうございます。
また、返信が遅くなり申し訳ございません。


現在、コマンドを確認できる環境がないため、確認後に結果をご報告
させていただきます。

お礼日時:2009/08/20 00:31

Perl で「(かっこのネストがあったら最も内側の) 最初のかっこ内を表示する」ならわざわざ置換しなくても


perl -ne 'if (/AAAAA01/) { /\(([^(]*?)\)/; print "$1\n"; }'
でいいような気がします>#4.
/AAAAA01/ and do { ... }
とどっちが速いかは知らない.
    • good
    • 0

空白や()のネストありとなると、awkではこんな感じでしょうね。



awk '/AAAAA01/{if (match($0,"[(].*[)]") > 0) print substr($0,RSTART+1,RLENGTH-2)}' < file

ついでにperlとsed

perl -e 'while(<>){ if(/AAAAA01/){ s#^[^(]*[(](.*)[)][^)]*$#$1#; print $_,"\n"; }}' < file

sed -En '/AAAAA01/s#^[^(]*[(](.*)[)][^)]*$#\1#p' file
    • good
    • 0

ああそうだ, #2 では「AAAAA01 が含まれる行には必ずかっこが存在する」とか「かっこでくくられた中にはかっこが存在しない

(ものが存在する)」とか, いくつか前提条件があるので注意してくださいね.
    • good
    • 0

sedでないとダメですか?


awkだと簡潔に書けるんですが。

awk '/AAAAA01/{print $8}' ログファイル

括弧付で出るのであとは好きなようにしてください。
    • good
    • 0
この回答へのお礼

mendokusa様

回答をいただきましてありがとうございます。
また、返信が遅くなり申し訳ございません。
awkは考えておりませんでした。

質問には書いておりませんでしたが、括弧の中の文字列は空白で
区切られた文字列が出力される場合もあり、文字数もランダムな
ものが出力されます。

説明が足らず申し訳ありません。

お礼日時:2009/08/19 23:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!