Удалить блок строк из файла с помощью awk

Поскольку ваш интерфейс управляется с помощью NetworkManager, вы можете управлять настройками соединения напрямую с помощью nmcli, чтобы установить зону:

на постоянной основе.
sudo nmcli connection modify p2p1 connection.zone trusted

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

0
26.02.2021, 20:35
5 ответов

Как насчет следующего:

awk 'BEGIN { metadata = 0 } /---/ { metadata = !metadata; next } !metadata' FILE

С помощью следующего вводаFILE(я добавил больше строк):

---
some metadata
...
---
Some real content.
...
Important content.
---
some metadata
...
---
1
2
3

печатает:

Some real content.
...
Important content.
1
2
3

Ваш сценарий:

awk '/---/ {s=1} /---/ && s==1 {s=0} !s' $file

не работает, потому что вы сначала установили sна 1:

/---/ {s=1}

вы немедленно установите его на 0:

/---/ && s==1 {s=0}

и распечатать запись, если !s, IOW !0так что в конце дня вы печатаете каждая строка.

3
18.03.2021, 22:28

GNU sed с использованием расширенных регулярных выражений Читается как удаление от тире -тире до тире -тире.

sed -Ee '
  /^-+$/,/^-+$/d
' file
2
18.03.2021, 22:28

Это не awk-решение, однако для достижения наилучшего результата попробуйте использовать sed:

sed '/^---$/,/^---$/d' $file
1
18.03.2021, 22:28
awk '/^---$/ && s++<2{ next } s>1 && NF' infile
1
18.03.2021, 22:28
sed '/metadata/,+2d' filename| sed '/---/d'

вход

---
some metadata
...
---
Some real content.
...
Important content.
---
some metadata
...
---
1
2
3

выход

Some real content.
...
Important content.
1
2
3
0
18.03.2021, 22:28

Теги

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