grep正規表現アサーションによる文字列の抽出

grep正規表現アサーションによる文字列の抽出

テキスト文字列を想定します。my_string

$ my_string="foo bar=1ab baz=222;"

bazキーワードとセミコロンの間の英数字文字列を抽出したいと思います。

正規表現アサーションを使用して末尾のセミコロンを除外するように次のgrepコードを変更するにはどうすればよいですか?

$ echo $my_string | grep -oP '(?<='baz=').*'
222;

ベストアンサー1

抽出したい文字列自体に含まれていない場合、最も簡単な方法は;(単一の文字一致)を(除外されたすべての文字一致)に置き換えることです。.[^;];

$ printf '%s\n' "$my_string" | grep -oP '(?<='baz=')[^;]*'
222

greplibpcre 7.2以降に接続すると、次のように振り返るのを簡単にすることもできます\K

$ printf '%s\n' "$my_string" | grep -oP 'baz=\K[^;]*'
222

これは、一致するテキストに改行文字が含まれていないと仮定して、文字列内のすべての一致を印刷します(grep各入力行は個別に処理されるため)。

おすすめ記事