LINUX.ORG.RU

Доброе время всем. Подскажите плиз, как с помощью скрипта определить количество строк в файлу игнорируя комментарии (строка начинается с #).

убрать строки с комментарием вначале

sed '/^#/d'

посчитать строки

wc -l

drBatty ★★
()
Ответ на: комментарий от Patjomkin

тебе уже ответили, но для подсчёта строк есть также wc.

dada ★★★★★
()
Ответ на: комментарий от zolden

Игнорируя комментарии и пустые строки:

grep '^[^#]' filename

Из недр лор (только не спрашивай меня как это работает...)

sin_a ★★★★★
()
Ответ на: комментарий от zolden

Дико извиняюсь, а как вывести этот результат, минусовав 1?

Patjomkin
() автор топика
Ответ на: комментарий от zolden

Мне там непонятно только что пропускается то, что заключено в квадратные скобки. Это в регулярных выражениях всегда так, что пропускается — то в квадратных скобках?

sin_a ★★★★★
()
Ответ на: комментарий от sin_a

Мне там непонятно только что пропускается то, что заключено в квадратные скобки. Это в регулярных выражениях всегда так, что пропускается — то в квадратных скобках?

Здрасти, приплыли. В скобках перечисляются допустимые диапазоны символов. А если скобка начинается с «^», то условия инвертируется - перечисленные символы становтся недопустимыми.

Маны читать не модно что ли?

geekless ★★
()
Ответ на: комментарий от zolden

Там написано «начало строки, за которым идёт любой символ, кроме #». И как же режутся пустые строки, как ты думаешь?

geekless ★★
()
Ответ на: комментарий от geekless

А, теперь в целом понятно. Но тогда эта шапочка используется по разному, в начале определяет наличие символа, а в скобках — инверсия. И, да, то есть если написать

grep '^[^#;]' filename
то пропустит всё начинающееся с решётки и точки с запятой?

А маны по регулярным выражениям зело тяжелы. Может и дойду когда нибудь...

sin_a ★★★★★
()
Ответ на: комментарий от zolden

Нет, при сопоставлении с регуляркой его там нет.

geekless ★★
()
Ответ на: комментарий от sin_a

А маны по регулярным выражениям зело тяжелы. Может и дойду когда нибудь...

Да нееее, я вот себя достаточно комфортно чувствую после двух легеньких заметок. Если интересно:

Часть 1

Часть 2

mau5
()
Ответ на: комментарий от sin_a

то пропустит всё начинающееся с решётки и точки с запятой?

Пропустит всё, начинающееся с решётки или точки с запятой.

akk ★★★★★
()
Ответ на: комментарий от geekless

Кстати, раз уж пошла такая пьянка, а возможно перед символом комментария добавить произвольное число пробелов? А то пока я делаю cat | while read ...

sin_a ★★★★★
()
Ответ на: комментарий от akk

Да, всё правильно. Это я неточно сформулировал. Знаки комментария иногда используются разные и одновременно.

sin_a ★★★★★
()
Ответ на: комментарий от geekless
19:27 sinaps@boat /tmp $ cat sample   

123

# 123
; 123
  
  123
  
123

   # 123
   ; 123
   
   123
   
123
19:27 sinaps@boat /tmp $ egrep -v '^ *(#|;|$)' sample
123
  123
123
   123
123
19:27 sinaps@boat /tmp $ 

Спасибо. Пока не очень понятно, но вроде работает.

sin_a ★★★★★
()
Ответ на: комментарий от sin_a

Ну были пробелы, про табуляцию речи не было))

По идее, чтобы проверять на табы и пробелы, надо egrep -v '^[[:space:]]*(#|$)' и egrep '^(([^[:space:]#][^#])|([^#]$))', проверять лень.

geekless ★★
()
Ответ на: комментарий от geekless

проверять лень.

Проверил, работает :) По крайней мере первое, с -v, оно короче. Осталось его запомнить... :)

sin_a ★★★★★
()
Ответ на: комментарий от geekless

а мне такие длинные штуки каждый раз выдумывать лень. Я обычно пишу

grep -v '^#\|^$'
Для 99.9% конфигов работает идеально

Prius
()
Ответ на: комментарий от sin_a

Ну -v означает «все, кроме соотвествующих выражению».
^# - решетка в начале строки
^$ - пустая строка
\| - экранированный символ логического «или» |

Prius
()
Ответ на: комментарий от anonymous

ну, или так, тут уже дело многолетней привычки

Prius
()
Ответ на: комментарий от Prius

В любом случае, практически всё что осталось это добавить в начало [[:space:]]. И получается его же пример.

sin_a ★★★★★
()
Ответ на: комментарий от sin_a

с -v, оно короче

Часто инверсия какого-то условия выглядит гораздо проще самого условия.

akk ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.