2016-06-28 4 views
0

sedコマンドで複数の-e句を作成する配列から変数を作成しています。bash変数を使用して複数の-e節をsedに渡す

結果の変数のようなものです:

sedArgs="-e 's/search1/replace1/g' -e 's/search2/replace2/g' -e 's/search3/replace3/g'" 

しかし、私は、私はエラーにsed: -e expression #1, char 1: unknown command: ''

を取得引数としてこれをsedを呼び出すしようとしたとき、私は、次の方法をsedを呼び出すようにしようとしました:

cat $myFile | sed $sedArgs 
cat $myFile | sed ${sedArgs} 
cat $myFile | sed `echo $sedArgs` 
cat $myFile | sed "$sedArgs" 
cat $myFile | sed `echo "$sedArgs"` 

と同じエラーが発生します。


UPDATE - 重複質問

同定されているように、これは「引用符展開」の問題である - 私はそれが特定の何かsedだと思ったが、duplicate question that has been identifiedは、右のトラックに私を置きます。

私はとしてsedArgs文字列を作成することで問題を解決するために管理:

sedArgs="-e s/search1/replace1/g -e s/search2/replace2/g -e s/search3/replace3/g" 

し、それを呼び出す:完璧に動作

cat $myFile | sed $sedArgs 

私はトリプルプレイのアドバイスを取って無駄を追い払ったcat

sed $sedArgs $myFile 

も完全に機能します。代わりに、単純な文字列の

+0

どうして?あなたが何をしようとしているかを示す新しい質問を投稿し、サンプル入力と期待される出力を完了すると、正しい方法でそれを行うことができます。また、googleの 'UUOC'と' '常にシェル変数を引用する ''と' '廃止されたバッククッキー ''。 –

+0

@ ed-mortonこれは、問題を効率的に、私がやっているすべてのものを混乱させることなく実証するために、私が達成しようとしていることの単純化です。私の実際のプロジェクトでは、 '$ sedArgs'変数は、ファイル名の配列から導かれた一群のロジックを介して構築されています。配列内の各ファイルはお互いを参照し、私の仕事は、ユーザーのフィードバックを提供しながら、各ファイル内の他のすべてのファイルへのすべての参照を効率的に置き換えることです。おそらくこれを達成するための多くの方法がありますが、私は他のすべてが働いており、上記の問題は私の唯一のポイントです。 –

答えて

2

使用BASHアレイ:ここ

# sed arguments in an array 
sedArgs=(-e 's/search1/replace1/g' -e 's/search2/replace2/g' -e 's/search3/replace3/g') 

# then use it as  
sed "${sedArgs[@]}" file 
0

はそれを行うにはまともな方法ではありませんが、あなたは1つの文字列としてスクリプトを渡すことができます。

sedArgs='s/search1/replace1/g 
s/search2/replace2/g 
s/search3/replace3/g' 

: then 

sed "$sedArgs" "$myFile" 

単一引用符付きの文字列は複数の行にまたがります。これはあなたが最初に見たときには怖いですが、完全に普通のシェルスクリプトです。また、cat is uselessの方法と、ファイル名を引用符で囲む必要があることにも注意してください。

関連する問題