如何使用 shell 变量来复制 sed 模式?

如何使用 shell 变量来复制 sed 模式?

我有 SED 模式:

[^a-zA-Z0-9]

/b\./s/.*c\.. \([^ ]*\) .*/\1/p

等等。

我需要将它们作为变量传递给 echo 命令。

目前,我定义 $pattern 变量如下:

$pattern="[^a-zA-Z0-9]"

然后通过管道将其传递给 echo,如下所示:

echo "$OUTPUT" | sed "s/$pattern/g"

但代码不是传递模式,而是传递命令并返回错误

=[^a-zA-Z0-9]: command not found

出了什么问题?

答案1

$ pattern='[^a-zA-Z0-9]'
$ echo "123 ABC" | sed "s/$pattern/g"
sed: -e expression #1, char 16: unterminated `s' command
$ echo "123 ABC" | sed "s/$pattern//g"
123ABC
$ echo "123 ABC" | sed "s/$pattern/XYZ/g"
123XYZABC

和...

Shell 变量的分配没有前导$.

答案2

代替

$pattern="[^a-zA-Z0-9]"

经过

pattern="[^a-zA-Z0-9]"

Shell 变量的赋值不带前导 $。

相关内容