Как найти последний шаблон линии

У меня есть файл с содержимым

x
a
x
b
x
c

Я хочу посмотреть последний случай,

x
c

когда я пытаюсь

sed -n  "/x/,/b/p" file

в нем перечислены все строки, начиная с x до c.

Ответ 1

Я не уверен, правильно ли я понял ваш вопрос, поэтому вот несколько снимков в темноте:

  • Вывести последнее вхождение x (регулярное выражение):

    grep x file | tail -1
    
  • В качестве альтернативы:

    tac file | grep -m1 x
    
  • Распечатать файл от первой соответствующей строки до конца:

    awk '/x/{flag = 1}; flag' file
    
  • Печатать файл от последней соответствующей строки до конца (печатает все строки в случае несоответствия):

    tac file | awk '!flag; /x/{flag = 1};' | tac
    

Ответ 2

Это может сработать для вас (GNU sed):

sed '/x/h;//!H;$!d;x' file

Сохраняет последний x и то, что следует в удержании, и печатает его в конце файла.

Ответ 3

не уверен, как это сделать, используя sed, но вы можете попробовать awk

awk '{a=a"\n"$0; if ($0 == "x"){ a=$0}}  END{print a}' file

Ответ 4

grep -A 1 x file | tail -n 2

-A 1 говорит grep печатать одну строку после строки совпадения
с tail вы получите последние две строки.

или в обратном порядке:

tac fail | grep -B 1 x -m1 | tac

Примечание: вы должны убедиться, что ваш паттерн достаточно силен, чтобы вы получили правильные линии. то есть, заключив его в ^ в начале и $ в конце.