`смотреть `запрос PostgreSQL без отображения полной строки подключения

Done in 2 steps Tested and worked fine in both scenarios

а. cp orginalfile fileneedto_be_changed' (Нужно сделать только один Раз)

orginalfile=====>which supposed to be changed

б.

differencecount=`awk 'NR==FNR{a[$0];next}!($0 in a){print $0}' orginalfile fileneedto_be_changed|wc -l`

if [ $differencecount -eq  0 ]
then
echo "NO changes in file"
else
echo "Noted there is changes in file"
fi
-121 ---47558 ​​-

Поскольку вы не знакомы с Perl, я буду немного многословен.

Во-первых, Perl — это утилита Linux, которая берет ваш входной файл и преобразует его с помощью команд для получения желаемого результата.

Обычно Perl проверяет входной файл построчно. Строка отделяется от следующей с помощью символа ascii \012, также известного как \n, называемого новой строкой. Но в этом случае мы бы предпочли читать абзац за раз. И как Perl идентифицирует пара?

Опция

-00будет обрабатывать пп. Они сохраняются в скаляре текущей записи$_

Обратите внимание, что запись теперь должна состоять из нескольких строк.

Я представляю это как :^....$ ^...$ ^....$В основном смежные острова линий. Все острова разделены символом \n.

Используемые параметры Perl:

-lэто делает две вещи,удалить разделитель входной записи из текущей записи, $ _, и при печати поставить его обратно :$/ = $\ = "\n"

-sэто включает рудиментарный синтаксический анализ переключателей командной строки. С его помощью мы можем указать порядок вывода переменных из самой командной строки.

-00— разделитель IRS, установленный в режим абзаца = пустая строка. Это будет поглощать абзацы из входных данных по одному и сохранять в $_для каждой итерации.

-nэто создает цикл вокруг файла, что означает, что он будет считывать из входного файла (на самом деле дескриптор файла, но это несущественно для нашего уровня )но не будет печатать его в конце, когда все преобразования завершены были применены к текущей записи. Вы должны сделать это явно.

-eЭто параметр, сообщающий Perl, что следующий за ним правильный код Perl будет применен к текущей записи.

--=>конец параметров командной строки Perl и то, что следует сейчас, это переключатели (, которые начинаются с тире ), а затем файлы до конца. Если у вас могут быть имена файлов, начинающиеся с тире, лучше начинать их с./ или указывать полный или относительный путь, или поместить еще один --, чтобы сигнализировать об окончании переключателей.

#

Теперь идет algorithmчасть:

my %h = reverse /^(([^:]+):. *)$/mg;

В Perl хэши или ассоциативные массивы обозначаются процентом %перед их именем. Таким образом, в нашем случае мы строим хеш %hи помещаем myперед ним, что означает, что он будет лексическим и выйдет из области видимости всякий раз, когда считывается следующая запись. Это означает, что новый новый хэш создается для каждого записывать.

Что означает выражение /..../mg? Во-первых, все регулярные выражения всегда привязаны к какой-либо скалярной переменной или выражению с помощью оператора if =~. Но здесь мы не видим ни одного. Неявно он привязан к переменной $_, что в данном случае означает текущую запись.

Продолжение следует---

0
22.09.2021, 11:43
1 ответ

Почему бы не использовать файл pgpass ? Я думаю, это намного безопаснее.

0
22.09.2021, 15:42

Теги

Похожие вопросы