Проблема с передачей вывода команды в zathura

$ awk '/^\[/ { head = $0; next } head != "" { print head; head = "" } { print }' file
[main]
foo = bar
[option]
opt1 = opt2
opt3 = opt4
[tail]
print = true

Эта awkпрограмма сохраняет каждый найденный заголовок в переменную headи сразу же переходит к следующей строке ввода.

Если строка является не строкой заголовка, и если переменная headчто-то содержит, выводится заголовок. Затем выводится текущая строка.

Это более или менее прямой перевод ответа Эда Гримма на awk.


Более или менее прямой перевод на sed, где место хранения используется для хранения самого последнего заголовка, будет выглядеть так

/^\[/ {
    h;    # store header in hold space (overwriting)
    d;    # delete pattern space, start next cycle
}

x;                   # swap with hold space
/./ { p; s///g; };   # if non-empty, print and empty
x;                   # swap with hold space

Или, как один -вкладыш,

$ sed -e '/^\[/{ h;d; }' -e 'x; /./{ p;s///g; }' -e x file
[main]
foo = bar
[option]
opt1 = opt2
opt3 = opt4
[tail]
print = true

Альтернативный, но более короткий sedвариант, основанный на том факте, что в конце файла есть пустой раздел/заголовок:

$ sed -n -e'/^\[/{ x;/\n/p;d; }' -e H file
[main]
foo = bar
[option]
opt1 = opt2
opt3 = opt4
[tail]
print = true

При этом заголовок и другие строки, связанные с ним, сохраняются в области удержания. Когда новый заголовок найден, пространство хранения заменяется и для него выполняется проверка на наличие символа новой строки. Если он найден, он печатается. Другие строки просто добавляются к пробелу.

Как и awk, это будет выглядеть как

awk '/^\[/ { if (sect ~ ORS) print sect; sect = $0; next } { sect = sect ORS $0 }' file
0
07.05.2020, 01:00
1 ответ
cat document.pdf | zathura -

Передает содержание из document.pdfЗатуре, который пытается передать его.

ls | zathura -

Если у вас есть только каталог document.pdfи больше ничего, это передает Затуре строку document.pdf, а не ее содержимое, поэтому Затура жалуется. Более того, если вы пытаетесь написать программу, которая включает в себя синтаксический анализ ls, вы, скорее всего, делаете это неправильно.

2
28.04.2021, 23:15

Теги

Похожие вопросы