grep 查找后面没有字符的字符串

grep 查找后面没有字符的字符串

我有一个参数params,我需要两个变量 - 一个用于params包含其中的单词,另一个用于其中=不包含 an 的单词。=

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打印,每个都在自己的行上,这种方式更容易使用( 的定义将取决于 的值)wordsparamsgrepwordsIFS

awk可能会更好:

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

或者:

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

bash可以使用数组参数自行实现此目的:

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

相关内容