как спомощью grep отфильтровать строки содержащие # в самом начале строки и пустые строки одновременно?т.е. чтоб осталось только
bla-bla #comment
bla-bla
>как спомощью grep отфильтровать строки содержащие # в самом начале строки и
>пустые строки одновременно?
>т.е. чтоб осталось только
>bla-bla #comment
>bla-blaсамое простое, что пришло на ум
cat primer.txt|grep -v "^#"|grep -xv ""
первый грэп удаляет (-v) строки, начинающиеся с #,
второй - удаляет пустые строки
Комментарии...
>>как спомощью grep отфильтровать строки содержащие # в самом начале строки и
>>пустые строки одновременно?
>>т.е. чтоб осталось только
>>bla-bla #comment
>>bla-bla
>
>самое простое, что пришло на ум
>cat primer.txt|grep -v "^#"|grep -xv ""
>первый грэп удаляет (-v) строки, начинающиеся с #,
>второй - удаляет пустые строки
>Комментарии...Все верно, но пустые строки удаляются так:
grep -v '^$'
>Все верно, но пустые строки удаляются так:
>grep -v '^$'
то есть окончательный вариант будет
cat primer.txt|grep -v "^#\|^$"
или
cat primer.txt|grep -v "^\(#\|$\)"
Это - хороший пример для изучения регулярных выражений.Вероятно, надо убирать ещё и строчки, где между началом и диезом находятся пробелы. Итак:
grep -Ev '^([[:space:]]*#.*)*$' ...
где:
-E - использовать расширенную версию регулярных выражений;
[[:space:]] - любой пробельный символ;
[[:space:]]* - пробельные символы в любом количестве от нуля и выше;
#.* - знак комментария и любые символы после него;
(...)* - то, что внутри скобок, может присутствовать в количестве ноль или более раз (звёздочку можно заменить на вопр.знак или на {0,}).
Впрочем, есть а др.вариант:grep -E '^[[:space:]]*[^[:space:]#]' ...
где:
^[[:space:]]* - любое количество пробелов в начале строкИ;
[^[:space:]#] - и после них хоть что-то, кроме пробела и комментария.
PS: Все мои рекомендации надо тщательно проверить, т.к. сейчас у меня под рукой нет Shell.