Вы можете сделать это, как показано ниже:-
первая строка скрипта напечатает строку 1, а sed извлечет строку из [] и сохранит в param1
Вторая строка скрипта напечатает 4-ю строку, а awk напечатает столбец 3 и сохранит его в переменной param2
3-я строка скрипта напечатает 5-ю строку, а 4-я строка скрипта напечатает 6-ю строку, awk напечатает столбец 1, а sed удалит из него "
param1=$(head -1 sudoers.txt | sed 's/ok: \[//g;s/] => {//g')
param2=$(head -4 sudoers.txt | tail -1 | awk '{print $3}')
param3=$(head -5 sudoers.txt | tail -1 | awk '{print $1}' | sed 's/"//g')
param4=$(head -6 sudoers.txt | tail -1 | awk '{print $1}' | sed 's/"//g')
echo '$param1 $param2 $param3 $param4' > sudoers.txt
Похоже, что во всех допустимых строках есть двоеточие, за которым следует десятичная цифра. Они также начинаются с буквенно-цифровой строки нижнего регистра, возможно, включая дефис. Итак, ваше регулярное выражение
^[a-z0-9-]+[0-9]
В вашем выводе есть пустая строка после каждой строки вывода. Если это то, чего вы действительно хотите, используйте sed:
sed -Ene '/^a-z0-9-]+:[0-9]/ s/$/\n/p' filename
Если вам не нужна двойная новая строка, тот же шаблон в grep будет проще.