как вывести абзацы с пробелами из файла с помощью unix / linux grep / awk / sed - PullRequest
0 голосов
/ 04 августа 2020

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

Get Authentication token from url
    1) should successfully return a token

  Get profile
    ✓ should successfully return a profile 

  Create a user profile 
    ✓ Should successfully create a new profile 


  Get a 400 Error when using invalid URL
    ✓ should return 400 status code )

  3 passing (9s)
  1 failing

  1) Get Authentication token from url
       should successfully return an access token:
     CypressError: `cy.request()` failed on:

https://testurl.com

The response we received from your web server was:

  > 400: Bad Request

This was considered a failure because the status code was not `2xx` or `3xx`.

If you do not want status codes to cause failures pass the option: `failOnStatusCode: false`

-----------------------------------------------------------

Я просто хочу просто вывести все, что ниже 1 failing, и я хочу, чтобы он остановился на пунктирной линии. как я могу это сделать с помощью grep, awk или sed?

Ответы [ 4 ]

2 голосов
/ 04 августа 2020

Используя sed, вы можете сделать это:

sed -En '/^[[:space:]]*[0-9]+ failing/,$p' file

или, если вы хотите пропустить строки маркеров, используйте:

sed -En '/^[[:space:]]*[0-9]+ failing/,/^---*/{ //!p; }' file

Используя awk, вы можете использовать:

awk '/^-+/{p=0}; p; /^[[:space:]]*[0-9]+ failing/{p=1}' file
1 голос
/ 04 августа 2020

Я думаю, что вы на самом деле пытаетесь сделать:

awk 'f{print; next} /^[[:space:]]*[0-9]+[[:space:]]+failing[[:space:]]*$/{f=1}' file

т.е. напечатать строки после строку, которая просто failing, перед которой стоит любое число и необязательное окружение пробелы. Это основано на вашем тексте (акцент на below мой) и коде (который проверяет только на failing) в конце вашего вопроса:

Я в основном хочу просто вывести все ниже 1 не работает ... Я пробовал awk '/failing/' RS="\n\n" ORS="\n\n" sample2 и awk -v RS='' -v '/failing/' sample2

1 голос
/ 04 августа 2020

Очень просто с :

awk '/\<1 failing/ {s=$0;found=1} {if(found && $0!=s) print}' file

напечатает:

1) Get Authentication token from url
       should successfully return an access token:
     CypressError: `cy.request()` failed on:

https://testurl.com

The response we received from your web server was:

  > 400: Bad Request

This was considered a failure because the status code was not `2xx` or `3xx`.

If you do not want status codes to cause failures pass the option: `failOnStatusCode: false`

Лог c заключается в том, что когда найдена интересующая нас строка, 1 failing, мы устанавливаем флаг в значение true (found) и сохраняем текущую строку (s). После этого awk перебирает все строки файла. Мы можем проверить два условия. Обнаруженный флаг верен и текущая строка отличается от s. Когда условия соблюдены, строка печатается.

0 голосов
/ 04 августа 2020

Ну, поскольку и помечены с использованием grep и Perl -совместимых регулярных выражений (где доступно, по крайней мере GNU grep):

$ grep -Pzo "(?<=1 failing\n)(.*\n)*" file

Рассмотрите возможность расширения регулярного выражения для 1 falling, если необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...