Linux

多行 grep 或 sed

  • December 18, 2021

我有一個非常大的包含多個部分的文本文件。這些部分包括部分標題。我想提取節標題並用 grep 或 sed 列印它們。該文件如下所示:

=========
Section Header
=========
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Mauris pellentesque pulvinar pellentesque habitant. A iaculis at erat pellentesque. Libero justo laoreet sit amet cursus. Blandit aliquam etiam erat velit scelerisque in dictum non. Cras tincidunt lobortis feugiat vivamus at. Elit ut aliquam purus sit amet luctus venenatis lectus. Et magnis dis parturient montes nascetur ridiculus mus mauris. Rutrum tellus pellentesque eu tincidunt tortor aliquam nulla facilisi. Urna id volutpat lacus laoreet non curabitur gravida arcu. Imperdiet proin fermentum leo vel orci porta. Vel risus commodo viverra maecenas accumsan. Diam ut venenatis tellus in. Ultrices dui sapien eget mi. Vivamus arcu felis bibendum ut. Nam aliquam sem et tortor consequat id porta nibh venenatis.

==========
Another Section
==========
Dictum at tempor commodo ullamcorper. Adipiscing elit pellentesque habitant morbi tristique senectus et. Malesuada pellentesque elit eget gravida cum sociis natoque. Venenatis tellus in metus vulputate eu. Eget aliquet nibh praesent tristique magna sit amet purus. Arcu non odio euismod lacinia at quis risus sed. Cursus eget nunc scelerisque viverra. Habitant morbi tristique senectus et netus et malesuada. Dolor sed viverra ipsum nunc. Magna eget est lorem ipsum dolor sit amet consectetur. Purus viverra accumsan in nisl nisi scelerisque eu ultrices. Nulla malesuada pellentesque elit eget gravida cum. Rhoncus est pellentesque elit ullamcorper dignissim cras.

標頭中等號的數量可能會有所不同。我想在單獨的行上列印每個節標題。最好向後看以刪除等號線。

也試試

$ sed -n '/=\+/ {n;p;n;}' file
Section Header
Another Section

在一行或多行上=,獲取下一行,列印它,然後獲取下一行(被遺忘)。

無論您的標題是單行還是多行,都可以在每個 Unix 機器上的任何 shell 中穩健地使用任何 awk:

$ awk '/^=+$/{f=!f; next} f' file
Section Header
Another Section

^={9,}$如果您有其他包含所有等號但不指示標題部分的行,請使用正則表達式。

引用自:https://unix.stackexchange.com/questions/682953