pkg set -A 0 myPackage-1.2.3_4
Или используйте -A 1
, чтобы отметить его как автоматический.
Кроме того, pkg query -a "%o %a"
перечислит все пакеты и их автоматическую -принадлежность. Или RTFM pkg-query
для примера того, как перечислить только автоматические или не -автоматические пакеты.
Поиск и сопоставление с регулярным выражением можно выполнить с помощьюperl
(моего любимого sed
не поддерживает необходимое не -жадное регулярное выражение (p )совпадение):
# echo AAAGCATATGCTAGCCCGTATAGCGATACTAGCTATACGATATATATGATCAATGCCCGTATAG | perl -pe 's|(.*?)(ATG.*?TA[AG])(.*?)|\2\n|g'
ATGCTAG
ATGATCAATGCCCGTATAG
AA
где команда perl
печатает запрошенные вами последовательности -и одну последнюю строку с остальной частью строки. Чтобы не усложнять регулярное выражение, его можно легко удалить вручную или с помощьюhead
:
echo AAAGCATATGCTAGCCCGTATAGCGATACTAGCTATACGATATATATGATCAATGCCCGTATAGAA | perl -pe 's|(.*?)(ATG.*?TA[AG])(.*?)|\2\n|g' | head -n -1
ATGCTAG
ATGATCAATGCCCGTATAG
Эти echo
команды показывают правильный результат для вашей последовательности. Если вы хотите прочитать содержимое файла и отправить результат во второй файл, сделайте следующее:
cat original_file | perl -pe 's|(.*?)(ATG.*?TA[AG])(.*?)|\2\n|g' | head -n -1 > new_file
, где original_file
— ваш исходный файл, а new_file
— целевой файл с отфильтрованными шаблонами.
В приведенном выше примере используется head
из GNU coreutils с синтаксисом «-n -1». Если это не работает для вас, попробуйте
cat original_file | perl -pe 's|(.*?)(ATG.*?TA[AG])(.*?)|\2\n|g' | awk 'NR>1 {print prev} {prev=$0}' > new_file
Это возможно в bash, но это действительно не очень хороший инструмент для этого:
#!/bin/bash
# Read the sequence into the variable $seq
seq=$1
## Check all three frames
for ((frame=0; frame<=3; frame++)); do
## Read the sequence in groups of 3
for ((i=$frame;i<=${#seq};i+=3)); do
## The codon: three nucleotides starting from the current position.
codon=${seq:i:3}
## set isORF to 1 if this is an ATG
if [[ ${seq:i:3} = "ATG" ]]; then
isORF=1
fi
## If we're in an ORF
if [[ $isORF = 1 ]]; then
## Add this codon to the ORF's sequence
ORF="${ORF}${codon}"
## Is this a STOP?
if [[ ${seq:i:3} = "TGA" ||
${seq:i:3} = "TAA" ||
${seq:i:3} = "TAG" ]];
then
## Print the ORF
echo "ORF: $ORF"
## Set isORF to 0 and empty the ORF variable to repeat the process
isORF=0
ORF=""
fi
fi
done
done
Сохраните это как foo.sh
, сделайте его исполняемым(chmod a+x foo.sh
)и запустите так:
/path/to/foo.sh AAAGCATATGCTAGCCCGTATAGCGATACTAGCTATACGATATATATGATCAATGCCCGTATAG
Вы можете использовать grep
, если вы используете версию GNU grep
, которая имеет параметр -P
для perl -совместимых регулярных выражений (PCRE ).
В качестве альтернативы вы можете использовать pcregrep
(, также известную как pgrep
), автор библиотеки PCRE . В наши дни нет особых причин использовать это, если только вы не используете старую версию GNU grep или не -GNU grep, которая не поддерживает опцию -P
и не может быть обновлена или заменена.
напр. (предполагая, что последовательности находятся в файле с именемinput.txt
):
$ grep -oP 'ATG.*?TA[AG]' input.txt
ATGCTAG
ATGATCAATGCCCGTATAG
Опция -o
указывает GNU grep выводить только совпадающий текст, а не всю строку, а -P
указывает использовать perl -совместимые регулярные выражения.
Или, если вы используетеpcregrep
:
$ pcregrep -o 'ATG.*?TA[AG]' input.txt
ATGCTAG
ATGATCAATGCCCGTATAG
Модификатор non -greedy ?
в регулярном выражении(.*?
)обеспечивает захват ВСЕХ совпадающих шаблонов, а не только самого длинного. В контексте регулярных выражений «жадный» означает «попытаться найти как можно БОЛЬШЕ» (значение по умолчанию ), а «не-жадный» означает «попытаться найти как можно МЕНЬШЕ».
Наhttps://www.regular-expressions.info/repeat.htmlесть хорошее объяснение этого. Кстати, остальная часть этого сайта — довольно хорошее место для изучения регулярных выражений с множеством руководств и примеров.
Обратите внимание, что большинство библиотек регулярных выражений не реализуют не -жадные совпадения, это расширение Perl, которое также было принято GNU grep. и программы, связанные с PCRE , конечно.
Кстати,Вот как будет выглядеть вывод без модификатора non -greedy:
$ grep -oP 'ATG.*TA[AG]' input.txt
ATGCTAGCCCGTATAGCGATACTAGCTATACGATATATATGATCAATGCCCGTATAG