grep изменение строки, за которой следует переменная
У меня есть файл следующего вида (с '-', служащим разделителями), и я хочу найти появление числа только тогда, когда оно следует за разделителем. Я полагаю, что это конкатенация grep '- \ n' и $ number, но я не могу найти способ сделать это правильно. благодаря..
1400 2 132 342 - 76567 1 1234 - 87 2 1400 54 -
- Поиск всех xml-файлов рекурсивно в каталоге для определенного тега и grep значение тега
- Как использовать tail -f с grep для отображения окружающих линий
- Возврат только части строки после соответствующего шаблона
- Отменить все переменные ENV, соответствующие _PROXY
- Извлечение IP-адреса из текста и сохранение его в переменной
5 Solutions collect form web for “grep изменение строки, за которой следует переменная”
Чтобы найти переменную перед разделителем:
Использование awk
:
$ awk '/!!!!!!!!!!!/{print num}{num=$0}' inputFile 342 1234 54
или gnu-awk
:
$ gawk 'NF && $0=$NF' RS='[!]+' inputFile 342 1234 54
Чтобы найти переменную после разделителя:
Использование awk
:
$ awk '/!!!!!!!!!!!/{if(getline) print $0}' inputFile 76567 87
или gnu-awk
:
$ gawk 'NR>1 && $0=$1' RS='[!]+' inputFile 76567 87
Следующая команда
grep '!!' -A 1 file|grep -vE '!!|\-\-'
будет давать
76567 87
grep имеет переключатель -A
который сообщает ему распечатать несколько строк после матча. В этом случае просто используйте -A 1
и вы получите ouptut like
!!!!!!!!!!! 76567 -- !!!!!!!!!!! 87 -- !!!!!!!!!!!
Теперь просто вычеркните цифры с | grep -e '[0-9]'
| grep -e '[0-9]'
.
используя AWK
Чтобы найти переменную перед разделителем:
awk '{ print $NF }' RS='!!!!!!!!!!!' infile
Вывод
342 1234 54
Чтобы найти переменную после разделителя:
awk 'NR>1{ print $1 }' RS='!!!!!!!!!!!' infile
Вывод
76567 87
Это число перед разделителем:
sed -n '/[^0-9]/!h;/^-$/{g;/./p}'
И это после:
sed -n '/^-$/{n;/./!d;/[^0-9]/!p}'