Что делает grep -v '^ #' do

Моя программа выглядит так.

ALL=`cat $1 | grep -v '^#' | wc -l`
FINISHED="0"

for i in `cat $1 | grep -v '^#'`; do
        echo "PROBE $i"
 I will be doing some operation
FINISHED=`echo $FINISHED"+1"|bc`

Я запустил этот script, указав имя файла как параметр, в котором будет присутствовать список зондов.

У меня есть 2 вопроса

  • Что означает grep -v '^#'. Я узнал, что '^ обычно используется для соответствия определенной строке. Но в имени файла, которое я даю, нет #. Более того, я получаю общее количество зондов для cat $1 | grep -v '^#' | wc -l.

  • echo $FINISHED"+1"|bc. Здесь любая идея о том, почему разработчик добавлен |bc?

Ответ 1

  • ^ означает "начало строки"
  • # - это буквальный символ #
  • -v означает "инвертировать совпадение" в grep, другими словами, возвращать все несоответствующие строки.

Поместите их вместе, и ваше выражение "выберите все строки, которые не начинаются с #"

| - символ канала, он берет вывод команды слева и использует его как вход команды справа. bc похож на калькулятор командной строки (для выполнения базовой математики).

Ответ 2

Я бы использовал это, чтобы исключить комментарии из кода, который я читаю. Поэтому все строки комментариев начинаются С#, и я не хочу их видеть, если их слишком много.

grep -v '^#'

Ответ 3

У нас разные способы расчета. Выберите тот, который вам нравится.

a=`echo 1+1 | bc`; echo $a
b=$((1+1)); echo $b
c=`expr 1 + 1`; echo $c
let d=1+1; echo $d