grep は、後ろに文字がない文字列を探します。

grep は、後ろに文字がない文字列を探します。

パラメータがあり、params2つの変数が必要です。一つはparams中にある単語用で、もう一つは=中にない単語用です。=

params="step1 step2 step3 param1=1 param2=2 param3=3"

test=$(grep -o '\b\w*\=\b\w*' <<<$params)
echo -e "test: " $test

これは動作し、以下を提供します。

param1=1 param2=2 param3=3

しかし、否定的な部分は動作しません。 grep -oを使用する必要がある場合はどうすればよいですか?

これらはこれまでは効果がなかった

$(grep -o '\b\w*[^\=]*' <<<$params)
$(grep -o '\b\w*[^\=]\b\w*' <<<$params)

答えとしてこれが必要です。

step1 step2 step3

ベストアンサー1

grepこれには適していません。もしあなたなら〜しなければならないこれを使用すると、次のことが機能します。

grep -Fv = <<<$(printf '%s\n' $params)

もしあなたなら〜しなければならない使用grep -o:

grep -o '^[^=]*$' <<<$(printf '%s\n' $params)
  • 上記はbashそれぞれ1行にprint fromを使用しますが、この方法を使用する方が簡単です(の定義はの値によって異なります)。wordsparamsgrepwordsIFS

awkより良いかもしれません:

awk 'BEGIN{RS=" "} !/=/' <<<"$params"

または:

awk '{for(i=1;i<=NF;i++) if($i !~ /=/) print $i}' <<<"$params"

bash配列パラメータを使用して直接これを実行できます。

paramsarray=( $params )
echo "${paramsarray[@]/*=*}"

おすすめ記事