grep на переменной

Можно также узнать, какое устройство и раздел принадлежат UUID путем издания следующего как корня:

blkid

или путем издания следующего как пользователя

ls -l /dev/disk/by-uuid
62
17.09.2016, 18:09
2 ответа

Считайте grep на его стандартном входе. Вот так, используя трубу ...

$ echo "$line" | grep select

... или здесь строка ...

$ grep select <<< "$line"

Также, вы можете заменить пробелы на новые строки перед смазыванием :

$ echo "$line" | tr ' ' '\n' | grep select

... или вы можете попросить grep распечатать только совпадение:

$ echo "$line" | grep -o select

Это позволит вам избавиться от остальной части строки при наличии совпадения.

Редактирование: Упс, читайте слишком быстро, спасибо Марко. Для того, чтобы посчитать произошедшие события, просто пропустите любую из них в wc(1) ;)

Другое редактирование, сделанное после комментария lzkata, цитируя $line при использовании echo.

91
27.01.2020, 19:32
test=$line i=0
while case "$test" in (*select*)
test=${test#*select};;(*) ! :;;
esac; do i=$(($i+1)); done

Для такой простой вещи не нужно вызывать grep.

Или как функция:

occur() while case "$1" in (*"$2"*) set -- \
        "${1#*"$2"}" "$2" "${3:-0}" "$((${4:-0}+1))";;
        (*) return "$((${4:-0}<${3:-1}))";;esac
        do : "${_occur:+$((_occur=$4))}";done

Нужно 2 или 3 аргумента. Предоставление большего количества аргументов исказит его результаты. Можно использовать как:

_occur=0; occur ... . 2 && echo "count: $_occur"

...которая печатает счетчик появления . в ... , если это происходит не менее 2-х раз. Например:

count: 3

Если $_occur при вызове либо пустой, либо не установлен, то это никак не повлияет на переменные оболочки и вернет 1, если "$2" произойдет в "$1" меньше, чем "$3" раза. Или, если вызывается только с двумя аргументами, он вернет 1 только в том случае, если "2" не находится в "1" . В противном случае он возвращает 0.

И так, в самом простом виде, вы можете сделать:

occur '' . && echo yay || echo shite

... что печатает...

shite

... но...

occur . . && echo yay || echo shite

... напечатает...

yay

Вы также можете написать его немного по-другому и опустить кавычки вокруг $2 в обоих утверждениях (*"$2"*) и "${1#*"$2"}"}". Если вы сделаете это, то можете использовать оболочковые глобусы для матчей типа sh[io]te для теста на соответствие.

7
27.01.2020, 19:32

Теги

Похожие вопросы