Используя grep для поиска подстроки между двумя строковыми переменными, которые содержат пути

выбор происходит через опцию -name, а действие через опцию -exec.

find . -type f -name '*-[0-9].[0-9].[0-9]-SNAPSHOT.txt' -exec sh -c '
  file=$1
  # do what you want with $file as many times as you want
' {} {} \;
0
22.12.2016, 00:54
2 ответа

Grep ожидает команду в формате grep [параметры] ШАБЛОН [ФАЙЛ ...] поэтому обрабатывает вторую строку как файл для сканирования. Если это всего лишь одна строка, вы можете отправить ее по стандартному вводу.

echo $haystack | grep $needle

Или как вам удобнее. Может быть, со строкой здесь:

grep $needle <<< $haystack
3
28.01.2020, 02:16

Bash имеет встроенное сопоставление с образцом с оператором сравнения == при использовании формы [[]] , поэтому вы можете сделать что-то вроде этого, чтобы полностью избежать вызова grep:

if [[ $HAYSTACK == *${NEEDLE}* ]] ; then
    echo "Your string has been found"
else
    echo "Your string has not been found"
fi

Если вам нужно выполнить более сложное сопоставление, Bash также поддерживает сопоставление регулярных выражений с помощью оператора = ~ .

2
28.01.2020, 02:16

Теги

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