だから私が言うことがあります:
ID: 54376
「ID:」なしで数字だけを返す正規表現を作成するのに役立ちますか?
メモ:文字列はファイルにあります。
答え1
この試み:
grep -oP '(?<=ID: )[0-9]+' file
または:
perl -nle 'print $1 if /ID:.*?(\d+)/' file
答え2
持つたくさんそれを行う方法。たとえば、
最も近いPCREでGNUを使用し、
grep
次の数字を一致させますID:
。grep -oP 'ID:\s*\K\d+' file
awk
次に始まるすべての行の最後のフィールドを使用して、単に印刷します。ID:
awk '/^ID:/{print $NF}' file
数値以外のフィールドも印刷しますが、数値のみを取得し、2番目のフィールドでのみ使用するには、次のようにします。
awk '($1=="ID:" && $2~/^[0-9]+$/){print $2}' file
拡張正規表現でGNU grepを使用し、2回解析します。
grep -Eo '^ID: *[0-9]+' file | grep -o '[0-9]*'
答え3
一致するセグメントのみを取得するには、egrep
with-o
またはgrep
withオプションを使用してください。数値を取得するには、正規表現を-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/flags
s
"ID: "
""
p
出力:
1
4