У меня есть дерево папок Linux со смешанной оболочкой, сценариями Perl и Python. Ни один из сценариев не имеет согласованных расширений файлов (.pl, .perl, .py, .sh или вообще не имеет расширения). Мне нужно определить, какие файлы являются сценариями Perl, а затем добавить новую строку кода для установки переменной, если этой переменной еще нет в сценарии Perl.
Благодаря Как вставить символ новой строки после запятой в `) ,(` с sed? Я придумал этот код, который использует sed для вставки новой строки кода.
Этот код работает, но есть ли более эффективный способ сделать это?
#! /bin/bash
NL='
$|++'
for f in `find "$1" -type f`
do
if [ $(grep -cP "^\#\!/.+/perl" "${f}") -gt 0 ]
then
if [ $(grep -c "$|" "${f}") -eq 0 ]
then
sed -i -r "s/^#!\/(.+)\/perl(.+)$/#!\/\1\/perl\2\\${NL}/g" "${f}"
fi
fi
done