предварительное имя
... переименовать с помощью выражений Perl. Следующая команда берет список файлов (KLL *) и для каждого из них захватывает все имя KLL плюс три числа ( KLL\d {3})
) и сохраняет их в специальную переменную $1
. s
в начале выражения означает «заменить» то, что находится между первыми двумя /
, на то, что находится между 2-м набором, которое является полным именем файла в $1
и добавить к нему .fastq
.
prename 's/(KLL\d{3})/$1.fastq/' KLL*
-121--95542- Это комбинация % {name}.% {arch}
. Если это то же самое, то эта модернизация. Если он отличается, то это другая установка.
Т.е. можно установить cAPI-3.1.6-x86 _ 64
и cAPI-3.1.6-i386
одновременно. Но вы не можете иметь cAPI-3.1.6-x86 _ 64
и cAPI-2.1.7-x86 _ 64
в одной системе (если вы не делаете действительно грязных трюков).
Как сказал чороба, sed всегда будет печатать строку по умолчанию с любыми подходящими заменами. Вы можете сделать то, что хотите с:
regex="ss"
string="blossom"
echo $string | sed -n "s/^.*\($regex\).*$/\1/p"
-n говорит sed не печатать строку, то p в конце команды s/сообщает sed печатать строку, с заменами, если она соответствует чему-либо.
Я думаю, вы можете комбинировать git blame
и git merge-base
, чтобы получить нужную информацию:
git blame -n $(git merge-base A B).. -- file | grep -v "^^" | grep "$PATTERN"
Это находит общего предка между A и B, затем запускает git blame
на file
, игнорируя все, что старше общего предка (нотация ..
указывает git blame
просматривать ревизии, начинающиеся с предка и заканчивая текущей головкой ). -n
добавляет номера строк в вывод. Затем grep -v "^^"
удаляет все строки, которые не изменились со времени общего предка, и, наконец, grep "$PATTERN"
ищет шаблон только среди строк, которые изменились. Поскольку git blame
в обратном режиме без -показывает только те строки, которые в данный момент находятся в файле, результаты будут включать только добавленные или измененные строки, что точно эквивалентно вашему фильтру ^\+
.