Несколько совпадений подстрок с использованием процесса подстановки - PullRequest
1 голос
/ 04 апреля 2019

Я хочу выполнить подстроку в файле .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

То, что я сделал, былозаписать небольшой .sh и сохранить результаты 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 is

declare -a org_val=($(chkconfig --list autofs) $(grep "^PROMPT=" /etc/sysconfig/init) )

Ответы [ 2 ]

1 голос
/ 04 апреля 2019
perl -nle'print for /\$\(([^)]*)\)/g'

Конечно, это предполагает, что ) не существует в $(...).

0 голосов
/ 05 апреля 2019

С 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...