私はname=
、スペースと英数字のみを含めます。
例えば。:
name=some value here
私は得る
some value here
私はこれにまったく初心者です。次のgrepは、name=
。
grep 'name=.*' filename
どんな助けも大歓迎です。
here のように、次のような肯定的な後読み句が必要です。
grep -P '(?<=name=)[ A-Za-z0-9]*' filename
-PはgrepにPerl方言を使用させます。そうでない場合は、おそらく括弧をエスケープする必要があります。また、別の場所で説明したように、-o
パラメーターを追加して、一致するもののみを出力することもできます。括弧内の部分は、英数字とスペースが必要であることを指定します。
肯定的な後読み句を使用する利点は、「name =」テキストが一致の一部ではないことです。 grepが一致したテキストを強調表示する場合、英数字(およびスペース)部分のみが強調表示されます。 -oパラメーターも「name =」部分を表示しません。そして、これをsedのようなテキストをキャプチャして処理する別のプログラムに移行する場合、「name =」の部分はキャプチャしませんが、キャプチャの括弧を使用してそれを行うこともできます。
これを試して:
sed -n 's/^name=//p' filename
デフォルトでは何も出力しない(-n)ようにsedに指示し、プレフィックスを何も置き換えず、置換が発生した場合に印刷します。
ボーナス:本当にスペースと英数字のみを含むエントリとのみ一致する必要がある場合は、次のこともできます。
sed -n 's/^name=\([ 0-9a-zA-Z]*$\)/\1/p' filename
ここでは、行末($)までのみスペースと英数字に一致するパターンを追加し、一致する場合はグループを括弧で置き換えて印刷します。
ガック
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=/}
grepは期待どおりに抽出されません。必要なのは
grep "name=" file.txt | cut -d'=' -f1-
grepは、パターンに一致する行全体を出力します。一致したパターンのみを印刷するには、grep -oオプションを使用します。パターンのname =部分を削除するには、おそらくsedを使用する必要があります。
grep -o 'name=[0-9a-zA-Z ]' myfile | sed /^name=/d