2012-09-03 29 views
6

私はsedを使って挿入をしようとしています(それを読んでいるだけです)、複数の行を挿入しようとしているのですか?Sed複数の行を挿入

何私が現在やっている:

sed -i "${line} i\ 
     /* Name - ID */ \ 
     select @ID = NULL \ 
     from Animals \ 
     where VrsnID = @VrsnID \ 
     and  Request= \"Request\" \ 
\ 
" animalNames.txt 

注131

という新たな問題

すべてが出力に1行に表示されますecho $line ==? (また、最初のインデントを逃す)

/* Name - ID */  select @ID = NULL   from Animals   where VrsnID = @VrsnID   and  Request= "Request" 

を解決しました。しかし、これはスロー:

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

を任意のアイデアなぜですか?新しいトラブルのために自分の時間

+0

、どのバージョンが、使用していますか? GNU/BSD? – Zulu

+0

GNU申し訳ありませんが、difを作ったことを認識していません –

+0

GNU sedバージョン4.2.1 – Thor

答えて

4

ため

ありがとう:シェルスクリプトで 利用、二重のバックスラッシュ\\

+0

驚くべきことに、どうして私はgoogleでこれを見つけることができなかったのですか?(複数の "sed multiple line insert"を20回以上検索したに違いありません) –

+1

AWKを使用する方が良いでしょう。 (私の意見では) – Zulu

+0

サイドノートでは、C&Pの代わりに "contents"をsedコマンドに挿入するファイルを読むことは可能ですか? –

11

は、バックスラッシュ+改行が何に展開されます。文字列に実際に改行を入れずに次の行に進む方法です。だからsedが見ているのはただの大きな線です。比較:

$ echo "foo\ 
> bar" 
foobar 
$ echo "foo 
> bar" 
foo 
bar 

をあなたがバックスラッシュとsedのために改行を渡すので、その前に別のバックスラッシュを置くことによって、バックスラッシュをエスケープする必要があります。

sed -i "${line} i\\ 
     /* Name - ID */ \\ 
     select @ID = NULL \\ 
     from Animals \\ 
     where VrsnID = @VrsnID \\ 
     and  Request= \"Request\" \\ 

" animalNames.txt 

あなたはhere documentとして標準入力にスクリプトを渡す場合、これはより読みやすいかもしれません。 ${line}の代わりに拡張を残す必要があるので、バックスラッシュを倍にする必要があります。

sed -i -f - animalNames.txt <<EOF 
${line} i\\ 
     /* Name - ID */ \\ 
     select @ID = NULL \\ 
     from Animals \\ 
     where VrsnID = @VrsnID \\ 
     and  Request= "Request" \\ 

EOF 
+0

すべての詳細情報をお寄せいただきありがとうございます! –

+0

+1のheredocバージョンです。さまざまな重要なメタ文字と引用符を含む複数の行で作業するインラインコマンドを取得するのに苦労しました。このメソッドは、初めて完全に動作し、よりクリーンなので、将来は私のgotoになります。 – randomsock

1

これはあなたのために働くかもしれない:SEDの

sed ${line}'i\ 
    /* Name - ID */ \ 
    select @ID = NULL \ 
    from Animals \ 
    where VrsnID = @VrsnID \ 
    and  Request= \"Request\" 

' animalNames.txt 
+0

新しい行には\\を使う必要があります –

+0

私のために@PezCuckow(GNU sedとbashを使用)は1つで十分です。 – potong

関連する問題