特定の文字列の後の数字を見つける正規表現

特定の文字列の後の数字を見つける正規表現

だから私が言うことがあります:

ID: 54376

「ID:」なしで数字だけを返す正規表現を作成するのに役立ちますか?

メモ:文字列はファイルにあります。

答え1

この試み:

grep -oP '(?<=ID: )[0-9]+' file

または:

perl -nle 'print $1 if /ID:.*?(\d+)/' file

答え2

持つたくさんそれを行う方法。たとえば、

  1. 最も近いPCREでGNUを使用し、grep次の数字を一致させますID:

    grep -oP 'ID:\s*\K\d+' file
    
  2. awk次に始まるすべての行の最後のフィールドを使用して、単に印刷します。ID:

    awk '/^ID:/{print $NF}' file
    

    数値以外のフィールドも印刷しますが、数値のみを取得し、2番目のフィールドでのみ使用するには、次のようにします。

    awk '($1=="ID:" && $2~/^[0-9]+$/){print $2}' file
    
  3. 拡張正規表現でGNU grepを使用し、2回解析します。

    grep -Eo '^ID: *[0-9]+' file | grep -o '[0-9]*'
    

答え3

一致するセグメントのみを取得するには、egrepwith-oまたはgrepwithオプションを使用してください。数値を取得するには、正規表現を-Eo使用してください。[0-9]

grep -Eo [0-9]+ filename

答え4

sedを使用してください:

{
    echo "ID: 1"
    echo "Line doesn't start with ID: "
    echo "ID: Non-numbers"
    echo "ID: 4"
} | sed -n '/^ID: [0-9][0-9]*$/s/ID: //p'

-n「デフォルトでは何も印刷しない」、「/^ID: [0-9][0-9]*$/この正規表現に一致する行」(「ID:」で始まり、1つ以上の数字、次の行の終わり)は次のs/ID: //p形式です。置換を実行するには、パターン(空の文字列)を代替テキストに置き換えます。これは「置換後にこの行を印刷してください」を意味します。s/pattern/repl/flagss"ID: """p

出力:

1
4

関連情報