Допустим, у меня есть переменная
line="This is where we select from a table."
Теперь я хочу понять, сколько раз происходит выбор в предложении.
grep -ci "select" $line
Я попробовал это, но это не сработало. Я тоже пробовал
grep -ci "select" "$line"
Это все еще не работает. Я получаю следующую ошибку.
grep: This is where we select from a table.: No such file or directory
...<<<"$line"
. Командаgrep
ожидает файл вместо этогоОтветы:
Были ли
grep
прочитать на стандартный ввод. Там вы идете, используя трубу ...... или здесь строка ...
Кроме того, вы можете заменить пробелы на новые строки перед grepping:
... или вы можете попросить
grep
распечатать только матч:Это позволит вам избавиться от остальной части линии, когда есть совпадение.
Редактировать: Ой, читай слишком быстро, спасибо Марко . Для того, чтобы сосчитать случаи, просто отправьте любой из них
wc(1)
;)Еще одно изменение, сделанное после комментария lzkata , цитирование
$line
при использованииecho
.источник
wc
для завершения задачи:grep -o <string> <<< "$variable" | wc -l
echo "$line"
для сохранения существующих новых строк вместо создания с помощьюtr
Вам не нужно призывать
grep
к такой простой вещи.Или как функция:
Требуется 2 или 3 аргумента. Предоставление большего, чем это, искажает его результаты. Вы можете использовать его как:
... который печатает число вхождений
.
в,...
если это происходит по крайней мере 2 раза. Нравится:Если
$_occur
пусто илиunset
когда оно вызывается, то это не повлияет на переменные оболочки вообще иreturn
1, если"$2"
происходит"$1"
меньше, чем"$3"
раз. Или, если вызывается только с двумя аргументами, он будет равенreturn
1, только если"$2"
его нет"$1"
. В противном случае возвращается 0.И так, в простейшем виде вы можете сделать:
... который печатает ...
...но...
... напечатает ...
Вы также можете написать его немного по- другому и опускать кавычки
$2
в обоих(*"$2"*)
и"${1#*"$2"}"
заявления. Если вы сделаете это, то вы можете использовать оболочки оболочки для совпадений, например,sh[io]te
для теста совпадения.источник
bash
иdash
/sh
(и, возможно, несколько других).