• 締切済み

正規表現

テキストファイルからコメント行以外から文字列"bbb"を含む 行をgrepで抽出したいと思っております。 コメント行→"#"で始まる行と"--"で始まる行 先頭にスペースがある場合もあるので、結局 先頭に「0個以上のスペース+("#"or"--")」がある行は対象外 として、文字列"bbb"を含む行をgrepで抽出したいと思っています。 下記、foo.txtの中から下記の抽出対象の2行のみを抽出したい場合、 どういった正規表現を書けばいいか教えてください。 【foo.txt】 aaa bbb → 抽出対象 aaa bbb →抽出対象 # aaa # bbb →抽出対象外 #aaa # aaa --aaa --aaa -- aaa -- bbb →抽出対象外 -aaa -bbb - aaa ご存じの方がいらっしゃいましたら、よろしくお願い致します。

みんなの回答

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

OSがLinux系ということなんで、多分GNU grepなのでegrepでなく grepでもかけると思いますが、ちと表記が面倒なのでegrepで D:\work\mogera>egrep -e "^([^#-].*|-[^-]*)?bbb" foo.txt bbb → 抽出対象 bbb →抽出対象 -bbb 抽出対象? aaabbb がんばればもうちょっと最適化できると思いますが、とりあえずは こんなところでどうでしょう? まああまり条件が複雑になるようなら#2の方のように、-v でのしぼりこみを 活用してパイプラインを組むのがわかりやすいと思います。

  • calo9
  • ベストアンサー率0% (0/0)
回答No.2

パイプでつないではいかがでしょう? yourid% grep bbb foo.txt | grep -ve "^ *--" | grep -ve "^ *#" この例だと、 -bbb は出力します。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

条件がちょっとあいまいです。 >先頭に「0個以上のスペース+("#"or"--")」がある行は対象外 スペース以外の最初に登場するキャラクタが # もしくは -- のとき対象外ということでいいですか? -- bbb →抽出対象外 -aaa -bbb 下のほうの -bbb は対象になるんですか? bbb → 抽出対象 aaa bbb →抽出対象 これ、上も下も bbb で始まる行でいいのでしょうか? 抽出対象と注釈のついている行だけ見ると、 grep '^bbb' で十分なような気がするんですが、それでできない条件はありますか? aaabbb のような、#でも--でもなく空白でもないキャラクタが先行するケースはありますか?

t29x0479
質問者

補足

"-"が2つの場合はコメント行として対象外にするつもりです。(.sqlファイルを対象としています。) aaabbbのようなケースもあります。 よろしくお願いします。

関連するQ&A