Разъяснение четырех режимов обработки /etc/resolv.conf в systemd-resolved.service

Если ваши поля никогда не могут содержать пробелы, пустое поле означает либо табуляцию в качестве первого символа ( ^ \ t ), либо табуляция как последний символ ( \ t $ ) или две последовательные табуляции ( \ t \ t ).Поэтому вы можете отфильтровать строки, содержащие любые из них:

grep -Ev $'^\t|\t\t|\t$' file

Если у вас есть пробелы, все становится сложнее. Если ваши поля могут начинаться с пробелов, используйте это вместо этого (поле с пробелами считается пустым):

grep -Pv '\t\s*(\t|$)|\t$|^\t' file

Изменение отфильтровывает строки, соответствующие табуляции, за которой следует 0 или более пробелов, а затем либо другая табуляция, либо конец линия.

Это также не сработает, если последнее поле не содержит ничего, кроме пробелов. Чтобы избежать этого, используйте perl с параметрами -F и -a , чтобы разделить ввод в массив @F , сообщив ему для печати, если одно из полей не пусто ( / ^ $ / ):

perl -F'\t' -lane 'print unless grep{/^$/} @F' file
3
20.04.2019, 18:04
0 ответов

Теги

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