Я использую приведенную ниже команду для фильтрации файла по # и пустым строкам. Но как мы можем grep без комментариев и пустых строк в Linux с одним grep.
[root@localhost ~]# cat test | grep -v ^# | grep -v ^$
рассмотрим файл:
valid config line 1
# Comment
valid config line 2 # Comment
Blank line between
These two
One space in the line between
These two
Если вы рассматриваете случаи:
Вы можете использовать cat file | grep -v '^$\|^#'
или cat file | grep -v '^\($\|#\)'
И вы получите что-то вроде:
valid config line 1
valid config line 2 # Comment
Blank line between
These two
One space in the line between
These two
Однако я бы также рассмотрел строки, которые начинаются со строки конфигурации и затем имеют встроенный комментарий (поддерживаемый в нескольких файлах конфигурации), строки, которые не являются пустыми, но имеют только пробелы, для этого в одной команде я бы использовал sed:
cat file | sed '/^\(#\|[[:space:]]*$\)/d;s/#.*//g'
Получение:
valid config line 1
valid config line 2
Blank line between
These two
One space in the line between
These two
[[:space:]]*$
соответствует 0 или более пробелам до конца строки^\(a\|b\)
сопоставляет строки, начинающиеся с a
или b
, используя #
как a
и [[:space:]]*$
как b
будет соответствовать всем строкам, начинающимся с #
, пустым строкам и строкам, в которых есть только пробелы ,/match/d
удаляет все совпадающие строки;
отделяет команды seds/a/b/g
заменяет a
на b
глобально. Использование #.*
качестве a
и пустого b
удалит все соответствующие комментарии после строки.Надеюсь, поможет. С уважением
Для простых случаев мой шаблон перехода к этому:
$ egrep '^[^#]'
Этот шаблон соответствует линиям, которые начинаются с некоторого символа ДРУГОГО, чем знак фунта.
Если вы расширите определение «пустой» строки, включив в нее строку, состоящую исключительно из пробелов, шаблон не будет выполнен, так как он будет соответствовать такой строке. Шаблон также завершается ошибкой, если вы разрешаете произвольный пробел перед знаком решетки в строке комментария (как это делают Apache, bash и другие).
Если эти случаи важны для вас, этот шаблон лучше:
$ egrep '^[[:blank:]]*[^[:blank:]#]'
Например:
$ cat test
# comment
# spaces then comment
config # then comment
before empty line
after empty line
space only on next line
tab only on next line
$ egrep '^[[:blank:]]*[^[:blank:]#]' test
config # then comment
before empty line
after empty line
space only on next line
tab only on next line
$
IIUC, вы хотите показать непустые и некомментированные строки. Вы можете сделать это с -e
используя одну команду grep
:
grep -v -e "^#" -e "^$" test
Например, если ваш test
выглядит так:
#a
uncommented line
#comment below blank line
вывод будет:
$ grep -v -e "^#" -e "^$" test
uncommented line
Понял!
[root@localhost ~]# cat file | grep -v ^'$\|#'