2009-07-24 1 views
11

は、次のようなものです:シェルスクリプト変数をsedの引数としてどのように使用しますか?私がやりたい何

#!/bin/sh 
EMAIL="-e 's/SOMETHING//g'" 

somecommand | sed "$EMAIL" 

しかし、私は、次を得る:

sed: -e expression #1, char 2: unknown command: `'' 

私は多くのバリエーションを試してみました。私は文字列を右に引用するだけの問題だと知っています。私がこれをやりたいのは、長いsedコマンドを読みやすくするためです。代わりに、代わりにsedスクリプトファイル(-fオプション付き)を使うべきですか?

UPDATE:

私の実際のスクリプトは少し複雑です:

#!/bin/sh 
EMAIL="-e s/SOME THING//g -e s/SOME THING ELSE//g ..." 

somecommand | sed "$EMAIL" 

私が手に単一引用符を除去した後:

sed: -e expression #1, char 18: unknown option to `s' 

答えて

16

を問題を引用し、このタイプのため、evalはほとんど常にあります溶液。何が起こっている

 
#!/bin/sh 
SED_ARG="-e 's/SOMETHING//g'" 

echo SOMETHING | eval sed "$SED_ARG" 

はあなたのバージョンでは、シェルは一つの引数(文字列「-eさん/ SOMETHING // G '」)でSED起動されていますが、sedの2つの引数で呼び出されるようにしたいということです( "-e"と "s/SOMETHING // g '")。 Evalはシェルが望むように文字列を解釈するようにします。

0

が値から単一引用符を削除しますEMAIL

EMAIL="-e s/SOMETHING//g" 
0

単一引用符を削除し、それがgrepを書き込む例でうまく

0

これは(二重引用符で囲む)私のために働いた、と行うことができます。

env | sed -n /"$USERNAME"/p 
+2

これは、まったく異なる処理を行っているためです。 – Swoogan

関連する問題