выбор происходит через опцию -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
' {} {} \;
Grep ожидает команду в формате grep [параметры] ШАБЛОН [ФАЙЛ ...]
поэтому обрабатывает вторую строку как файл для сканирования. Если это всего лишь одна строка, вы можете отправить ее по стандартному вводу.
echo $haystack | grep $needle
Или как вам удобнее. Может быть, со строкой здесь:
grep $needle <<< $haystack
Bash имеет встроенное сопоставление с образцом с оператором сравнения ==
при использовании формы [[]]
, поэтому вы можете сделать что-то вроде этого, чтобы полностью избежать вызова grep:
if [[ $HAYSTACK == *${NEEDLE}* ]] ; then
echo "Your string has been found"
else
echo "Your string has not been found"
fi
Если вам нужно выполнить более сложное сопоставление, Bash также поддерживает сопоставление регулярных выражений с помощью оператора = ~
.