キーと値のペアの構文から値のペアを抽出したいのですが、できません。
私が試した例:
echo employee_id=1234 | sed 's/employee_id=\([0-9]+\)/\1/g'
しかし、これはemployee_id=1234
および1234
これは実際にはキャプチャグループです。
ここで何が間違っていますか?私も試しました:
echo employee_id=1234| egrep -o employee_id=([0-9]+)
しかし、成功していません。
1。egrep -o
:を使用
echo 'employee_id=1234' | egrep -o '[0-9]+'
1234
2。grep -oP
(PCRE)を使用:
echo 'employee_id=1234' | grep -oP 'employee_id=\K([0-9]+)'
1234
。sed
:を使用
echo 'employee_id=1234' | sed 's/^.*employee_id=\([0-9][0-9]*\).*$/\1/'
1234
Anubhavaの回答番号2を展開するには、grepが返す一般的なパターンonlyは次のとおりです。
$ regex="$precedes_regex\K($capture_regex)(?=$follows_regex)"
$ echo $some_string | grep -oP "$regex"
そう
# matches and returns b
$ echo "abc" | grep -oP "a\K(b)(?=c)"
b
# no match
$ echo "abc" | grep -oP "z\K(b)(?=c)"
# no match
$ echo "abc" | grep -oP "a\K(b)(?=d)"
awk
を使用する
echo 'employee_id=1234' | awk -F= '{print $2}'
1234
あなたは特にsed
を求めていますが、何か他のものを使用する可能性がある場合-POSIX準拠のシェルは、フォーク/サブシェルを必要としないパラメーター拡張を行うことができます:
foo='employee_id=1234'
var=${foo%%=*}
value=${foo#*=}
$ echo "var=${var} value=${value}"
var=employee_id value=1234
拡張正規表現にsed -Eを使用
echo employee_id=1234 | sed -E 's/employee_id=([0-9]+)/\1/g'