シェル変数を使用してsedパターンをコピーする方法は?

シェル変数を使用してsedパターンをコピーする方法は?

SEDモードがあります。

[^a-zA-Z0-9]

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

など。

echoコマンドに変数として渡す必要があります。

現在の $pattern 変数を次のように定義します。

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

その後、パイプを介して次のようにエコーします。

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

そして…

シェル変数は先行せずに割り当てられます$

答え2

変える

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

渡す

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

シェル変数は先行$なしで割り当てられます。

関連情報