![grep 查找后面没有字符的字符串](https://linux22.com/image/166935/grep%20%E6%9F%A5%E6%89%BE%E5%90%8E%E9%9D%A2%E6%B2%A1%E6%9C%89%E5%AD%97%E7%AC%A6%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2.png)
我有一个参数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
打印,每个都在自己的行上,这种方式更容易使用( 的定义将取决于 的值)words
params
grep
words
IFS
awk
可能会更好:
awk 'BEGIN{RS=" "} !/=/' <<<"$params"
或者:
awk '{for(i=1;i<=NF;i++) if($i !~ /=/) print $i}' <<<"$params"
bash
可以使用数组参数自行实现此目的:
paramsarray=( $params )
echo "${paramsarray[@]/*=*}"