Вы также можете использовать серебряный искатель или ag
с регулярным выражением в ответе @StephenRauch. Это дает вам возможность сделать это с большим количеством файлов, если это будет необходимо.
cd $TARGET_DIR
ag 'AK9\*[PRE]'
Если вы хотите передать базовую часть w разных имен файлов в качестве первого параметра сценарию, измените цикл на:
for i in {1..201..5}; do
grep "Pitch" "${1}-${i}" | cut -d" " -f25
done > pitch.txt
(при условии, что дефис всегда присутствует и не передается как часть параметра, а переменная часть имен файлов всегда находится в конце)
Не совсем ясно, что вы ищете, но из того, что я получаю, это то, что у вас есть 6 каталогов, но в каждом каталоге есть файлы, названные аналогичным образом, с номерами в их конце. Тогда вы можете сделать это следующим образом:
for arg
do
for i in {1..201..5}; do
grep "Pitch" "$arg-$i" | cut -d" " -f25
done > $arg/pitch.txt
echo "========Pitch==========="
cat $arg/pitch.txt
done
Используйте этот синтаксис:
for ((i=0; i<=$1; i=(($i + 5)) ))
grep "Pitch" filename-$i | cut -d" " -f25
done > pitch.txt
echo "========Pitch==========="
cat pitch.txt
Эта функция bash
должна работать:
foo() {
searchstring="$1"
shift 1
echo "========${searchstring}===========" ;
grep --no-filename "${searchstring}" "$@" | \
cut -d" " -f25 | tee "${searchstring,,}".txt
}
Вызвать так:
foo Pitch filename-{1..201..5}
Как это работает. Поскольку grep
позволяет использовать несколько имен файлов из командной строки, а bash
позволяет добавлять префиксы в строку к коду, например {1..10}
, нет необходимости передавать имена файлов по одному в цикле for
. cat
и >
могут быть заменены одной футболкой
.
Первый аргумент foo
- это строка поиска (например, « Match ]»), для которой оболочка устанавливает значение « $ 1 », что дает перемещен во временную переменную $ searchstring
, затем « Match » удаляется с помощью shift 1
, так что « $ @ » содержит только имена файлов.