#bash #perl #awk #sed
#bash #perl #awk #sed
Вопрос:
Я хочу выполнить сопоставление вложенных строк внутри.файл sh и извлеките список cmds и добавьте к нему существующий файл.
Пока я использую perl -ne
, и он работает с последним сопоставленным значением, отображаемым на экране как
echo 'declare -a org_val=($(chkconfig --list autofs) $(grep "^PROMPT="/etc/sysconfig/init)' |
perl -pe 's|.*$((.*?))s |1|g'
Ниже приведен результат приведенной выше команды:
grep `"^PROMPT=" /etc/sysconfig/init`
Я также хочу, чтобы он выводил
chkconfig --list autofs
Что я сделал, так это написал небольшое .преобразуйте и сохраните результаты sed в массив, используя подстановку команд ниже
#!/bin/bash
nl='n'
declare -a array0
while IFS=$nl read -r line
do
array0 =$line
#echo $line
done < <( perl -pe 's|.*$((.*?))s |1|g') < /tmp/sunny
echo "${array0[@]}"
Вывод выше является
declare -a org_val=($(chkconfig --list autofs) $(grep "^PROMPT=" /etc/sysconfig/init)
содержимое /tmp/sunny
является
declare -a org_val=($(chkconfig --list autofs) $(grep "^PROMPT=" /etc/sysconfig/init) )
Ответ №1:
perl -nle'print for /$(([^)]*))/g'
Конечно, это предполагает, что внутри )
не существует $(...)
.
Ответ №2:
С GNU awk для RS с несколькими символами:
$ echo 'declare -a org_val=($(chkconfig --list autofs) $(grep "^PROMPT="/etc/sysconfig/init)' |
awk -v RS='[$][(][^()] ' 'RT{print substr(RT,3)}'
chkconfig --list autofs
grep "^PROMPT="/etc/sysconfig/init