2016-08-16 4 views
0

私はShellscriptを使って一連の行をコメントしようとしています。上記のファイルから シェルスクリプトを使ってnext []を見つけて、それらの間のすべての行をコメントするにはどうすればいいですか?

$>cat abc.txt 
[entry1] 
abcd 
efgh 
ijkl 
mnop 

[entry2] 
abcd 
efgh 
ijkl 
mnop 
qust 

[entry3] 
abcd 
efgh 
ijkl 
mnop 
qrst 
uvwx 
yz 

[entry4] 
... 
... 
... 
... 

は、私は[ENTRY2]見つけ、[entry3] 注に[ENTRY2]の間のすべての行をコメントにしたい:エントリ間の行数が同じではありません。

私は、我々がSEDでこれを行うことができますことを考えている

$>cat abc.txt 
[entry1] 
abcd 
efgh 
ijkl 
mnop 

#[entry2] 
#abcd 
#efgh 
#ijkl 
#mnop 
#qust 

[entry3] 
abcd 
efgh 
ijkl 
mnop 
qrst 
uvwx 
yz 

[entry4] 
... 
... 
... 
... 

...以下のような出力をしたいです。正確な使用法については不明です。

誰でもお勧めできますか?

+1

[編集ヘルプ](http://stackoverflow.com/editing-help)をご覧ください。 – Cyrus

+1

予想される出力を投稿する – sjsam

答えて

2

あなたが推測したように、sedはあなたの友人です。あなたはあなたが望むものを達成するためにパターンの間のテキストをマッチさせることができます。それはパターン

  • 次のコマンドを含むパターンの間に

    • /pattern1/,/pattern2/マッチテキストの仕組み

      sed -E '/^\[entry2\]/,/^$/s/^(.)/#\1/' file 
      
      [entry1] 
      abcd 
      efgh 
      ijkl 
      mnop 
      
      #[entry2] 
      #abcd 
      #efgh 
      #ijkl 
      #mnop 
      #qust 
      
      [entry3] 
      abcd 
      efgh 
      ijkl 
      mnop 
      qrst 
      uvwx 
      yz 
      
      [entry4] 
      ... 
      ... 
      ... 
      ... 
      

      は、ここにsは、このようなすべての行に適用されます。

    • 空白行をコメントする必要がないので、少なくとも1つの非空白文字を確認する必要があります(これを実現する.に注意してください)。
    • ^()がグループ化文字のために使用され、\1

    一緒にラインを読んでグループを交換する交換部品に使用されている

  • 行の先頭にマッチ

    []には特別な意味がありますsedを使用すると、文字の範囲を表します。リテラル[または]を検索するには、それらをエスケープする必要があります。つまり、ここで行ったように\[です。


  • +0

    こんにちはsjsam、正しいファイル形式を再度含めました。編集されました。あなたは今plsを提案できますか? –

    +0

    @SanthoshkumarRamachandran:更新を参照してください。これは各[エントリ]フィールドの前に空白行があることを前提としています。 – sjsam

    +0

    優秀なsjsam ..私は期待どおりの出力を得ています。あなたはその命令を説明できますか? –

    0
    awk ' /^\[entry2\]/ {flag=1} /^\[entry3\]/{flag=0} flag { $0="#"$0}1' entry 
    [entry1]<br> 
    abcd<br> 
    efgh<br> 
    ijkl<br> 
    mnop<br><br> 
    
    #[entry2]<br> 
    #abcd<br> 
    #efgh<br> 
    #ijkl<br> 
    #mnop<br> 
    #qust<br><br> 
    # 
    [entry3]<br> 
    abcd<br> 
    efgh<br> 
    ijkl<br> 
    mnop<br> 
    qrst<br> 
    uvwx<br> 
    yz<br> 
    
    [entry4] 
    ... 
    ... 
    ... 
    ... 
    
    +0

    こんにちはsoFanは、予想される出力とファイル形式を追加しました。 plsが今すぐチェックし、 –

    +0

    @SanthoshkumarRamachandranを提案してください。もしそれが役に立ったら今すぐチェックしてください。 –

    +1

    @soFan:Plsは空白行がコメントされていないことに注意してください、それを実現するにはo/pをtweekする必要があります。 – sjsam

    関連する問題