Linux

使用 GNU sed 提取可能由空行分隔的兩個模式行之間的標題名稱

  • December 20, 2021

我有以下文件:

------

Introduction
----------
Optio eum enim ut. Et quia molestias eos. Doloribus laborum quia quae. Magnam cupiditate quis consectetur.

-----
Chapter1: Foo
-----

Odit beatae eius voluptas temporibus sint quia. Eos et tempora similique laboriosam optio consequatur quibusdam. Fugit suscipit cupiditate ea perspiciatis rem labore cum eos.

-----
Chapter bar


-----
Et consequatur quia quia et architecto et sunt. Perferendis qui deserunt qui est illo est sapiente ipsam. Fugiat vel amet magni in quam. Eligendi totam cum sapiente harum blanditiis minima

具有以下約束:

  • 標題符號-至少出現 5 個字元或更多。
  • -和標題之間可能有任意(但有限)數量的空行。

預期的輸出是:

Introduction
Chapter1: Foo
Chapter bar

我知道這可以使用來完成,awk但請不要建議這樣做。我希望看到一個純 GNU sed 解決方案。

這是我到目前為止所嘗試的:

sed -n ':a; /-\+/{n; /^$/!{p; b a}}' input.txt

但是該命令似乎不起作用。

這將列印至少包含一個字母或數字字元的行,只要它們位於標題內。

sed -n '/^-----/,/^-----/{/[[:alnum:]]/p;}' file

我提出這個解決方案:

$ sed -n '/\-\{5,\}/,/\-\{5,\}/p' file | sed '/\-\+\|^$/d'
Introduction
Chapter1: Foo
Chapter bar

  • '/\-\{5,\}/,/\-\{5,\}/p'選擇-(至少 5 個)之間的部分。
  • '/\-\+\|^$/d'刪除空行或以 . 開頭的行-

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