Как найти последний шаблон линии У меня есть файл с содержимым 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 Примечание: вы должны убедиться, что ваш паттерн достаточно силен, чтобы вы получили правильные линии. то есть, заключив его в ^ в начале и $ в конце.
Ответ 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 Примечание: вы должны убедиться, что ваш паттерн достаточно силен, чтобы вы получили правильные линии. то есть, заключив его в ^ в начале и $ в конце.