удалить строки до матча, за исключением вышеприведенного матча из stdout

Это в некоторой степени возможно, в зависимости от приложений, которые вы используете, и от того, полагаются ли они на udisks2.

Добавление x-gvfs-hide к параметрам монтирования в fstab скроет определенные точки монтирования от таких приложений.

Пример:

# forcibly hide device in user interface
/dev/disk/by-id/ata-HITACHI_HTS723232A7A364_E3834563KRG2HN-part1   /home/davidz/Data  auto  defaults,x-gvfs-hide 0 0

https://git.gnome.org/browse/gvfs/tree/monitor/udisks2/what-is-shown.txt

1
26.06.2018, 03:35
2 ответа

Вот awkодин -вкладыш.

awk '/^abc/ {prev = $0; prevabc = "true"}; /^xyz/ {if (prevabc == "true") {print prev; prevabc = "false" } ; print}' file.txt

Пояснение

  • /^abc/ {prev = $0; prevabc = "true"};:Если строка начинается с abc, не печатайте ее, а вместо этого сохраните значение строки в переменной prevи укажите, что эта строка начинается с abc, сохранив trueв переменной prevabc.
  • /^xyz/ {if (prevabc == "true") {print prev; prevabc = "false" } ; print}:Если строка начинается с xyz, выполните следующие действия.
    • if (prevabc == "true") {print prev; prevabc = "false" }:Если предыдущая строка начиналась сabc(из-за prevabc == "true"), то напечатайте предыдущую строку prevи сбросьте prevabcна false.
    • print:Так как эта строка начинается с xyz, выведите и эту строку.
0
27.01.2020, 23:43

Вы можете поддерживать буфер из двух -строк (, используя циклND)и печатать первую строку перед ее удалением, только если в буфере есть xyz:

$ cat stdout | sed ':a; $!N; /xyz/P; D; ba'
abc jkl
xyz mno
xyz pqr
abc jkl
xyz mno
xyz pqr
1
27.01.2020, 23:43

Теги

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