Вы не можете переключать интерпретаторы, но вы можете создать новый процесс оболочки, а затем вернуться к perl:
my $sh_code = <<'END_SH'
for f in *.mrc; do mv -- "$f" "${f%%.*}".mrc ; done
END_SH
system 'bash', '-c', $sh_code
Или вы можете заменить текущий процесс perl оболочкой
exec 'bash', '-c', $sh_code
Но, как отвечает @choroba, perl — это язык общего назначения, и он может справиться практически с любой задачей.
При использовании GNU sed
и расширенных регулярных выражений(-r
)следующее должно работать:
sed -r "s/^([^:]*:){3}/FFF:/"
как в sed <...> filename.txt
илиecho "$original_string" | sed <...>
Это заменит подстроку, которая, начиная с начала строки (^
), содержит три раза подряд шаблон, состоящий из «любого, кроме двоеточия ([^:]
)», за которым следует двоеточие, на шаблон FFF:
.
Sol1:
praveen@praveen:~/template$ sed "s/AAA: BBB: CCC:/FFF:/g" p.txr
FFF: DDD: EEE
praveen@praveen:~/template$ awk '{gsub("AAA: BBB: CCC:","FFF:",$0);print $0}' p.txr
FFF: DDD: EEE
sol2 using python
k=open('p.txr','r')
>>> m=re.compile(r'AAA: BBB: CCC:')
>>> import re
>>> m=re.compile(r'AAA: BBB: CCC:')
>>> for i in k:
... print re.sub(m,"FFF:",i)
...
FFF: DDD: EEE
Ты можешь использовать это:
$ sed -e 's/:/\n/3;s/.*\n/FFF:/' file
Здесь мы используем функцию, обнаруженную в sed, для осуществления n -го изменения, n<=512. Кроме того, новая строка гарантированно не будет видна в пространстве шаблона, если только она не была введена априори с помощью G, H, N или добавлена буквальная новая строка, как в нашем случае.
Это гнусед -изм. Мы используем экранированный литерал новой строки для Posix sed.