1. ホーム
  2. regex

[解決済み] sed: マッチするグループのみを表示

2022-04-25 19:06:48

質問

最後の2つの数値(1つはint、1つはfloat、その後に任意の空白文字)を取得して、それらだけを印刷したい。

foo bar <foo> bla 1 2 3.4

印刷する必要があります。

2 3.4

今のところ、次のようになっています。

sed -n  's/\([0-9][0-9]*[\ \t][0-9.]*[\ \t]*$\)/replacement/p' 

を与えてくれる。

foo bar <foo> bla 1 replacement

しかし、グループ1に置き換えようとすると、行全体が印刷されてしまいます。

sed -n  's/\([0-9][0-9]*[\ \t][0-9.]*[\ \t]*$\)/\1/p' 

グループ内の正規表現にマッチした行の部分のみを印刷するにはどうすればよいですか?

どのように解決するのですか?

行全体をマッチさせるので .* を正規表現の先頭に追加します。これにより、行全体がグループの内容で置換されます。

echo "foo bar <foo> bla 1 2 3.4" |
 sed -n  's/.*\([0-9][0-9]*[\ \t][0-9.]*[ \t]*$\)/\1/p'
2 3.4