任意のテキストの後には、コロン(:
)とスペース、数値結果、別のスペース、およびその他の任意のテキストがあります。たとえば、次のようになります。
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
数字の後ろに何が来るのか分かりません。可能であれば別のコロンがあります。例えば、
eggs: 42 (from: 17 hens)
それから他の答えが与えられます
17
。それがあなたが望むものであれば大丈夫です。 (でもお願いします。編集するあなたの質問はあなたが望むものを教えてくれます。)最初コロンを^[^:]*
代わりに使用してください^.*
。「数値結果」が何であるかについて不正確です。次のような場合があります。
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