sedを使用して2文字間の数字を抽出するには?

sedを使用して2文字間の数字を抽出するには?

任意のテキストの後には、コロン(:)とスペース、数値結果、別のスペース、およびその他の任意のテキストがあります。たとえば、次のようになります。

text: 30 (5 new)

たとえば、数値を抽出します30

30

現在、次のコードのみがあります。

sed 's/.*: //g'

これは私に次のような結果を与えます:

30 (5 new)

私は何を見逃していますか?

答え1

式('s/.*: //g')は最初の部分を削除し、残りはすべて保持します。これにより、行全体が目的の数字を含む部分に置き換えられます。

sed -re 's/^.*: ([0-9]+) .*$/\1/'

詳細:^.*:は最初の部分(行の先頭に相当)、番号は次であり、後で使用([0-9]+)できるグループを定義するために括弧内にあり、最後に最後まで行の残りの部分です。.*$その後、これを最初のグループに置き換えます(1つのみ)。\1

答え2

たぶん、次のようなものがあります。

$ echo "text: 30 (5 new)" | sed -e 's/^.*: \([0-9][0-9]*\).*$/\1/'
30

それを破壊する:

  • ^.*:行の先頭から始まり、コロンとスペースで終わるすべての文字と一致します。
  • \([0-9][0-9]*\)数字を一致させます。括弧は、後で参照できるグループを定義します。
  • .*$行末の文字数と一致します。

sパターン全体を\1最初のグループ(つまり括弧 - 数字で定義されたグループ)の内容である()で置き換えます。

答え3

  1. 数字の後ろに何が来るのか分かりません。可能であれば別のコロンがあります。例えば、

    eggs: 42 (from: 17 hens)
    

    それから他の答えが与えられます17。それがあなたが望むものであれば大丈夫です。 (でもお願いします。編集するあなたの質問はあなたが望むものを教えてくれます。)最初コロンを  ^[^:]*代わりに使用してください^.*

  2. 「数値結果」が何であるかについて不正確です。次のような場合があります。

    balance: 609.83 (I’m running low on money)
    balance: -17.42 (overdraft!)
    
    • まずお願いします編集するあなたの質問は、あなたの数字がどのように見えるかを示すことです。
    • あなたの質問のタイトルは「2文字の間」です。数値結果(それが何であれ)の後にスペースが続くことを保証する場合(そしてそうでない)含むどんな空白でも! )、その後

      sed 's/^[^:]*: \([^ ]*\).*/\1/'
      

      おそらく最も簡単な解決策でしょう。これにより、後に続く空白以外の文字がすべてキャプチャされます。これは、数字が行末にある場合(スペースが続かない場合)を処理します。

      Blind mice: 3
      

    (知っているアンディ・ダルトンの回答 数字が行末にある場合も処理します。 )

答え4

次の2つの方法を試すことができます。

最初の方法はawkを使用します。

awk '{print $2}' filename

関連情報