Обработка текста UNIX для файла журнала на основе col (:)

Вы можете сделать это, как показано ниже:-

  1. первая строка скрипта напечатает строку 1, а sed извлечет строку из [] и сохранит в param1

  2. Вторая строка скрипта напечатает 4-ю строку, а awk напечатает столбец 3 и сохранит его в переменной param2

  3. 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 
    
0
12.02.2020, 20:16
3 ответа
grep -v " " $IN | grep -P ":.*:"
0
28.04.2021, 23:23

Похоже, что во всех допустимых строках есть двоеточие, за которым следует десятичная цифра. Они также начинаются с буквенно-цифровой строки нижнего регистра, возможно, включая дефис. Итак, ваше регулярное выражение

^[a-z0-9-]+[0-9]

В вашем выводе есть пустая строка после каждой строки вывода. Если это то, чего вы действительно хотите, используйте sed:

sed -Ene '/^a-z0-9-]+:[0-9]/ s/$/\n/p' filename

Если вам не нужна двойная новая строка, тот же шаблон в grep будет проще.

0
28.04.2021, 23:23

Это

<input | grep -oP '(.+?:){6}.+'

Здесь регулярное выражениеhttps://regex101.com/r/EO1yhi/1

-1
28.04.2021, 23:23

Теги

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