LinuxForum.Fans
Тема

Сократить регулярку

Автор: 1000Mhz 31 сообщений 3473 просмотров
17.02.2015 22:58 #414656

Мне стыдно, но затупил на пустом месте. Суть такова:
надо исключить пустые строки, строки из одних пробелов или строки, начинающиеся с # (строки с комментариями)

text
egrep -v '^[#\ ]\ *$'

- нуль эффекта (почему?)

text
egrep -v '^[#\ ]\ *'

- режет только комментарии

text
egrep -v '^#.*|^\ *$'

- работает, но выглядит страшно. Можно как-то адекватнее написать?

* про sed знаю если что, но спрашиваю вот про grep :)

18.02.2015 09:44 · отредактировано #414674

Да нормально выглядит, нечего тут сокращать.
Правда можно убрать экранирование пробела, поскольку ты одинарные кавычки используешь:

text
egrep -v '^#.*|^ *$'
18.02.2015 09:56 · отредактировано #414677
text
grep -v '^\W*#\|^\W*$'
18.02.2015 10:12 #414680

Главное чтобы работало правильно и самому понятно было. А сокращать - уже дело последнее, придёт с опытом.

18.02.2015 15:10 #414723

Ок, я уже понял, что без "|" нельзя написать, т. к. grep и шаблон исключения. Парсинг текстов на "естественных языках"- аццкое занятие! :)

19.02.2015 08:46 · отредактировано #414796

1000Mhz, вы наверное не знаете, что у sed можно задать несколько команд через ";", и есть другие команды, кроме s.

У мучайтесь с конвейером grep, я за.

"1000Mhz" написал:
надо исключить пустые строки, строки из одних пробелов или строки, начинающиеся с # (строки с комментариями)
text
sed '/^\s*$/d; /^\s*#/d'
19.02.2015 08:46 #414798

Обычно мучения с селом, а конвейер и греп сильно проще и понятнее.

19.02.2015 08:49 #414799

"Vascom" написал:
Обычно мучения с селом, а конвейер и греп сильно проще и понятнее.
это называется: "write-only быдлокод". Поймите меня правильно, админу оно нормально, "написал-выполнил-ушёл дальше ИБД". Но ТС вроде какой-то скрипт пишет…
19.02.2015 09:00 #414800

Да я понимаю. Просто если надо изредка и по быстрому что-то сделать, то быдлокод проще и быстрее написать.

19.02.2015 09:43 #414808
"Vascom" написал:
Просто если надо изредка и по быстрому что-то сделать, то быдлокод проще и быстрее написать.

а знают-ли об этом новички, что вы им быдлокод советуете? Написанный "лишь-бы работало на моём локалхосте".

19.02.2015 10:13 #414812

Ну вроде я об этом предупредил.
Учащихся вождению автомобиля тоже не с болида F1 начинают.

19.02.2015 11:38 #414826
"drBatty" написал:
1000Mhz, вы наверное не знаете, что у sed можно задать несколько команд через ";"

Не знал. Зато знал, что можно задать несколько команд в виде -е команда1 -е команда2 ..

"drBatty" написал:
и есть другие команды, кроме s

.. но их немного))


Тема была создана не потому, что я не знаю sed, а потому, что мне интересно, как это было сделать с grep. А почему? Потому что я сильно и от всей души не люблю sed за его гребаный частокол слешей! Вот drBatty считает это нормальным синтаксисом, а я- нет.

19.02.2015 12:01 #414838

Vascom, лично ну к вам вопросов у меня и нет.
разве что напомню:

In addition, the variant programs egrep and fgrep are the same as grep -E and grep -F, respectively. These variants are
deprecated, but are provided for backward compatibility.
19.02.2015 12:04 #414839

Это я тоже помню, но топикстартер явно не суперпереносимый универсальный скрипт делает, так что говорить про замену egrep на grep -E я не стал.

19.02.2015 12:09 · отредактировано #414843

"1000Mhz" написал:
. но их немного))
достаточно для тьюринг-полноты.

"1000Mhz" написал:
Тема была создана не потому, что я не знаю sed, а потому, что мне интересно, как это было сделать с grep. А почему? Потому что я сильно и от всей души не люблю sed за его гребаный частокол слешей! Вот drBatty считает это нормальным синтаксисом, а я- нет.
есть разные задачи. К каждой задачи есть свой инструмент. В данном случае делать на grep — извращение. Grep изначально задумывалась для того, что-бы применить одну регулярку ко всему файлу и выдать результат.

"Vascom" написал:
Это я тоже помню, но топикстартер явно не суперпереносимый универсальный скрипт делает, так что говорить про замену egrep на grep -E я не стал.
сложно было написать вместо
text
egrep -v

так:

text
grep -Ev

?

19.02.2015 12:12 #414845

Лучше бы вместо поучений просто дал этот совет коротко.

19.02.2015 12:12 #414846

Да не нужен тут расширенный синтаксис grep, вполне достаточно стандартного:

text
grep -v '^\W*#\|^\W*$'
19.02.2015 12:16 · отредактировано #414849
"drBatty" написал:
В данном случае делать на grep — извращение.

В данном случае как раз нет, так как парсится всего лишь конфигурационный файл, это не_основная_логика.
По поводу egrep.. просто так привык и пока нет причин отвыкать.

"bormant" написал:
Да не нужен тут расширенный синтаксис grep, вполне достаточно стандартного

Аналогично- просто некогда было анализировать, закатал по привычке. Но хуже не будет и по существу это ничего не меняет.

19.02.2015 12:21 #414852
"1000Mhz" написал:
как раз нет, так как парсится всего лишь конфигурационный файл, это не_основная_логика.

не нужно врать, что, дескать, у вас "основная логика хорошая".

19.02.2015 12:24 #414855

Мне кажется тему надо закрывать, иначе в холивар превратится. Вопрос же решён.

Войдите или зарегистрируйтесь, чтобы ответить.