grep изменение строки, за которой следует переменная

У меня есть файл следующего вида (с '-', служащим разделителями), и я хочу найти появление числа только тогда, когда оно следует за разделителем. Я полагаю, что это конкатенация grep '- \ n' и $ number, но я не могу найти способ сделать это правильно. благодаря..

1400 2 132 342 - 76567 1 1234 - 87 2 1400 54 - 

  • Почему этот однострочный лайнер не может произвести вывод?
  • Вырезать имя файла и результат поиска grep из пути
  • Найти файлы, содержащие текст, но сообщать о них в качестве результата
  • Будет ли grep быстрее работать с разрывами строк?
  • Как отсортировать имена файлов, показанные в команде grep, на основе метки времени?
  • Как искать слово во всем содержимом каталога в linux
  • Оптимизация сценария оболочки с длительным циклом работы
  • Что означает «if echo $ line | grep -F = &> / dev / null "делать?
  • 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}' 
    Interesting Posts
    Linux и Unix - лучшая ОС в мире.