2016-06-18 5 views
1

私は特に、パターンがパスに一致する行の前と後の行を挿入しようとしています。sedとinsertとappendの検索タームとして変数を渡す

私が今までに見つけたすべての例は、置き換えて言及しています。 前後に挿入する変数を正しく渡したり読み込んだりするにはどうすればよいですか?

path="/home/pi/eqserver/source" 
sed "/\$path/i <br>\n<span style="color:white">" ./input_file> ./output_file 

前と後に要請::

私がやっている例のレイアウトは明らかに失敗し

<br> 
    Fri 17 Jun 2016 05:22:48 PM PDT: In file included from /home/pi/eqserver/source/common/patches/mac.cpp:112:0: 
    Fri 17 Jun 2016 05:22:48 PM PDT: /home/pi/eqserver/source/common/patches/ss_define.h:151:0: warning: "DECODE_LENGTH_ATLEAST" redefined 
<br> 
<span style="color:white"> 

spanタグで(行がそうする前に変更されないままと同じです後)底は完全に異なったパターンの一致から期待される。このパターンの結果ではありませんでした。私はちょうど参照としてそれを含めた。

パスを含むすべての行のコンテンツは異なりますが、パスは常に同じになります。 私はすべての行をmake出力から自分自身のスパンに変えています。 これは、ビルド出力のブラウザフレンドリなビューの一部です。要求ごと

期待出力:

<br> 
<br> 
<span style="color:white"> 
    Fri 17 Jun 2016 05:22:48 PM PDT: In file included from /home/pi/eqserver/source/common/patches/mac.cpp:112:0: 
</span> 
<br> 
<br> 
<span style="color:white"> 
    Fri 17 Jun 2016 05:22:48 PM PDT: /home/pi/eqserver/source/common/patches/ss_define.h:151:0: warning: "DECODE_LENGTH_ATLEAST" redefined 
</span> 
<br> 
<br> 
<span style="color:white"> 

閉鎖スパンは、この溶液をsedの第によって追加されるであろう。

+0

前後のファイルコンテンツの例を挙げることはできますか? –

+0

質問にそれを追加しました。 – Speedz

+1

パス内のすべてのスラッシュをエスケープする必要があります。それ以外の場合、最初のバックスラッシュは正規表現を終了します。また、 '$'をエスケープしてシェルが変数を展開しないようにしてください。 – Barmar

答えて

2

sed -e '\#/file/path#i above' -e '//a below' file 

N.B.ファイルパスには代替セパレータ\#...#、暗黙の改行に対応してiおよびaコマンドを終了する2つの式(-e)があります。

+1

両方の答えは素晴らしいですが、前と後の両方を1行で処理するので、スクリプトをほぼ半分に減らすことができました。また、スクリプト全体を読みやすくする。 – Speedz

1

あなたが近くにいるようです。

あなたの#1の問題は、$ pathのメタ文字ですね。これは、(GNU SED)あなたのために働くかもしれない

$: path=$(echo "/home/pi/eqserver/source" | sed 's/\//\\\//g') 
$: sed "/$path/i <br>\n<span style=\"color:white\">" ./input_file 
<br> 
<br> 
<span style="color:white"> 
    Fri 17 Jun 2016 05:22:48 PM PDT: In file included from /home/pi/eqserver/source/common/patches/mac.cpp:112:0: 
<br> 
<span style="color:white"> 
    Fri 17 Jun 2016 05:22:48 PM PDT: /home/pi/eqserver/source/common/patches/ss_define.h:151:0: warning: "DECODE_LENGTH_ATLEAST" redefined 
<br> 
<span style="color:white"> 
+1

これはまさに私が必要としているもので、引用されたセクションの代わりにスクリプトの別の部分から静的パスを渡すことができ、エスケープなどの理由で2つのセクションのパス変数を複製することなく他の場所でうまくいく。 – Speedz

関連する問題