web-dev-qa-db-ja.com

`name =`の直後にgrepを使用して何かを取得する方法は?

私はname=、スペースと英数字のみを含めます。

例えば。:

name=some value here

私は得る

some value here

私はこれにまったく初心者です。次のgrepは、name=

grep 'name=.*' filename

どんな助けも大歓迎です。

57
ngaame

here のように、次のような肯定的な後読み句が必要です。

grep -P '(?<=name=)[ A-Za-z0-9]*' filename

-PはgrepにPerl方言を使用させます。そうでない場合は、おそらく括弧をエスケープする必要があります。また、別の場所で説明したように、-oパラメーターを追加して、一致するもののみを出力することもできます。括弧内の部分は、英数字とスペースが必要であることを指定します。

肯定的な後読み句を使用する利点は、「name =」テキストが一致の一部ではないことです。 grepが一致したテキストを強調表示する場合、英数字(およびスペース)部分のみが強調表示されます。 -oパラメーターも「name =」部分を表示しません。そして、これをsedのようなテキストをキャプチャして処理する別のプログラムに移行する場合、「name =」の部分はキャプチャしませんが、キャプチャの括弧を使用してそれを行うこともできます。

102
markets

これを試して:

sed -n 's/^name=//p' filename

デフォルトでは何も出力しない(-n)ようにsedに指示し、プレフィックスを何も置き換えず、置換が発生した場合に印刷します。

ボーナス:本当にスペースと英数字のみを含むエントリとのみ一致する必要がある場合は、次のこともできます。

sed -n 's/^name=\([ 0-9a-zA-Z]*$\)/\1/p' filename

ここでは、行末($)までのみスペースと英数字に一致するパターンを追加し、一致する場合はグループを括弧で置き換えて印刷します。

22
John Zwinck

ガック

echo "name=some value here" | awk -F"=" '/name=/ { print $2}' 

またはbashで

str="name=some value here"
IFS="="
set -- $str
echo $1    
unset IFS

または

str="name=some value here"
str=${str/name=/}
4
ghostdog74

grepは期待どおりに抽出されません。必要なのは

grep "name=" file.txt | cut -d'=' -f1-
4
Stefano Borini

grepは、パターンに一致する行全体を出力します。一致したパターンのみを印刷するには、grep -oオプションを使用します。パターンのname =部分を削除するには、おそらくsedを使用する必要があります。

grep -o 'name=[0-9a-zA-Z ]'  myfile | sed /^name=/d
1
Charles Ma