grep:括弧内のすべてに一致する正規表現のみ


21

かっこ内でのみ単語を一致させるには

入力: this is (test.com)

欲望の出力: test.com


1
一致する「grep」正規表現を探していますか、または表示される出力を生成する「sed」代替コマンドを探していますか?
rickhg12hs

回答:


28

以下にいくつかのオプションを示します。これらはすべて、目的の出力を印刷します。

  1. 使用grepして-oフラグ(のみラインのマッチング部分を印刷)とPerl互換正規表現(-P実行できる)前後参照

    printf "this is (test.com)\n" | grep -Po '(?<=\().*(?=\))'
    

    その正規表現には説明が必要な場合があります。

    • (?<=\():これは肯定後読み、一般的な形式は(?<=foo)bar、それはすべてのケースに一致しますbarた直後にfoo。この場合、開き括弧を探しているので\(、エスケープに使用します。

    • (?=\)):これは肯定的な先読みであり、単に閉じ括弧と一致します。

  2. -oオプションgrep我々はカッコ内にあり、その後でそれらを削除何を探して原因はそれだけで、任意の行のマッチした部分を印刷しますsed

    printf "this is (test.com)\n" | grep -o '(.*)' | sed 's/[()]//g'
    
  3. Perlですべてを解析します。

    printf "this is (test.com)\n" | perl -pe 's/.*\((.+?)\)/$1/'
    
  4. 以下を使用して全体を解析しsedます。

    printf "this is (test.com)\n" | sed 's/.*(\(.*\))/\1/'
    

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.