И то, и другое можно быстро и легко сделать с помощью однострочного короткого perl-файла.
A1: создать одну строку (т.е. одну строку) с разделенными запятыми строками в одинарных кавычках
Сначала создайте список, который будет использоваться в следующих (SQL) примерах:
cat > list.txt <<EOF
A
B
C
D
EOF
Или в стиле Perl:
perl -le 'print foreach (A..D)' > list.txt
Создание разделенной запятойсписок со строками из одинарных кавычек:
Чтобы избежать проблем с интерпретацией одинарных кавычек в bash, используйте двузначное шестнадцатеричное значение ASCII \ x27 для одинарных кавычек <<strong>'>.
perl -e 'print join ",", map { chomp; qq(\x27$_\x27) } <>' list.txt # 'A','B','C','D'
Тот же принцип, только использование восьмеричного значения ASCII \ 047 :
perl -e 'print join ",", map { chomp; qq(\047$_\047) } <>' list.txt # 'A','B','C','D'
Для других целей (не SQL), гденеобходимы двойные кавычки:
perl -e 'print join ",", map { chomp; qq("$_") } <>' list.txt # "A","B","C","D"
В случае, если #
, ;
или :
необходимы в качестве разделителя, просто замените ,
в двойных кавычках join ",",
на то, чтотребуется.
Например:
join "#",
join ";",
join ":",
Как в большинстве случаев списки принимаютсявырезать и вставлять из другого места.Итак, использование pbpaste
на Mac OS X |macos может существенно сократить рабочий процесс.Кстати: любая подсказка для эквивалентной команды Linux будет принята с благодарностью.Чтобы проверить следующий пример, сначала заполните буфер созданным списком: cat list.txt | pbcopy
pbpaste | perl -e 'print join ",", map { chomp; qq(\x27$_\x27) } <>'
Еще короче;замените содержимое буфера обмена преобразованным списком на лету, используя pbcopy
:
pbpaste | perl -e 'print join ",", map { chomp; qq(\x27$_\x27) } <>' | pbcopy
, чтобы иметь его под рукой при необходимости (например, нажав ctrl + x + c ~ c для преобразования ), просто напишите эту строку в $ HOME / .inputrc
"\C-xc": "pbpaste | perl -e 'print join ",", map { chomp; qq(\x27$_\x27) } <>' | pbcopy"
Активируйте привязку клавиш (см. readline или многие вопросы с тегами readline , чтобы узнать больше):
bind -f $HOME/.inputrc # read/activate settings
bind -s # show key-bindings
Теперь просто нажмите ctrl + x + c для полностью автоматизированного преобразования значений SQL INSERT.
Для полноты изложения некоторые аннотации по поводу цитирования SQL
Выдержка из этого очень хорошего разъяснения о кавычках и обратных галочках : Следует использовать одинарные кавычкидля строковых значений, как в списке VALUES () .Двойные кавычки также поддерживаются MySQL для строковых значений, но одинарные кавычки более широко принимаются другими СУБД, поэтому полезно использовать одинарные кавычки вместо двойных кавычек.
A2: Создать список команд(т.е. много строк) из списка (например, номера процессов)
Этот подход создает, в отличие от A1, несколько строк (повторение команд с идентификаторами процессов).
И снова: Сначала создайте список, который будет использоваться для следующего (Cisco) примера:
perl -le 'print foreach (1000..1010)' | pbcopy
В действительности скопируйте реальные идентификаторы процесса в буфер обмена;после этого преобразуйте простой список чисел в соответствующий список команд:
pbpaste | perl -wle 'while (<>) {chomp; print "clear crypto isakmp $_"}'
Это дает:
clear crypto isakmp 1000
clear crypto isakmp 1001
clear crypto isakmp 1002
clear crypto isakmp 1003
clear crypto isakmp 1004
clear crypto isakmp 1005
clear crypto isakmp 1006
clear crypto isakmp 1007
clear crypto isakmp 1008
clear crypto isakmp 1009
clear crypto isakmp 1010
Чтобы иметь его под рукой, когда это необходимо (например, нажав Ctrl + x + p ~ p для списка процессов ), просто напишите эту строку в $ HOME / .inputrc
"\C-xc": "pbpaste | perl -wle 'while (<>) {chomp; print "clear crypto isakmp $_"}' | pbcopy"