各コメントブロックの最後のコメント行を除くすべて削除

各コメントブロックの最後のコメント行を除くすべて削除
  • ターゲット:各コメントブロックの最後の行を除くすべてのコメント行を削除します。ファイルがコメントブロックで終わったら、完全に削除します。各コメント行はで始まります#

  • 私が試したコマンド

    sed -z -e 's/#.*\n#/#/g' "${InputP}"
    
  • 入力ファイル

    # Life/Living
    # Life/Passion
    - [Mindfulness.md](file:///home/nikhil/Documents/Git/Life/Passion/PassionSrc/Sports/Yoga/Mindfulness/Mindfulness.md)
    # Life/PersonalManagement
    # Life/Social
    # Linux/AmazingNotes
    # Linux/Backintime
    # Linux/DotFiles
    # Linux/GitScripts
    - [Peaceful.m3u](file:///home/nikhil/Documents/Git/../Mobile/Documents/PortableNotes/PortableNotesSrc/SocialActivity/Music/SongsPlaylist/Data/Peaceful.m3u)
    - [AuxiliaryFiles.sh](file:///home/nikhil/Documents/Git/Linux/GitScripts/GitScriptsSrc/GitInit/GitNew/Src/AuxiliaryFiles.sh)
    # PythonWs/NumericalProgramming
    # PythonWs/Python
    # PythonWs/ScientificComputing
    
  • 期待される出力

    # Life/Passion
    - [Mindfulness.md](file:///home/nikhil/Documents/Git/Life/Passion/PassionSrc/Sports/Yoga/Mindfulness/Mindfulness.md)
    # Linux/GitScripts
    - [Peaceful.m3u](file:///home/nikhil/Documents/Git/../Mobile/Documents/PortableNotes/PortableNotesSrc/SocialActivity/Music/SongsPlaylist/Data/Peaceful.m3u)
    - [AuxiliaryFiles.sh](file:///home/nikhil/Documents/Git/Linux/GitScripts/GitScriptsSrc/GitInit/GitNew/Src/AuxiliaryFiles.sh)
    
  • しかし、私はこの出力を得ます。
    # PythonWs/ScientificComputing
    

この問題を解決する方法を知っている人はいますか?

ベストアンサー1

問題は.*貪欲なので、をsed -z -e 's/#.*\n#/#/g'含む最初の行から始まる#最後の行まで一致することです#。これは-z、パターン空間のファイル全体を一度に吸収するフラグが原因で発生します(テキストファイルにnullバイトがないと仮定)。

問題を解決するSedスクリプトは次のとおりです。

sed -n '/^#/N;/\n#/D;p' file
  • /^#/N行がで始まると、#次の行がパターンスペースに追加されます。
  • /\n#/Dパターンスペースにnewlineとnewlineが含まれている場合は、#newlineの前のすべてのエントリを削除して新しいループを開始します。
  • pこのコマンドに達すると、パターンスペースが印刷されます。

便利なリンク

おすすめ記事