Подтвердить что ты не робот

Как избавиться от разделителя строк "-" при использовании grep с линиями контекста?

У меня есть текстовый файл с именем compare.txt, который я хочу извлечь единственную строку, которая следует за каждой строкой, содержащей шаблон "nmse_gain_constant". Следующая команда меня закрыла:

grep -A 1 nmse_gain_constant compare.txt | grep -v nmse_gain_constant

Но это включает в себя разделительную строку "-" между каждой строкой желаемого текста. Любые простые идеи, как избавиться от линий "-" ?

Я приведу вам пример текста здесь, но символы "-" ошибочно интерпретируются этим веб-сообщением в качестве контрольных символов, и то, что вы увидите, неверно.

4b9b3361

Ответ 1

Я делаю это:

 grep ... | grep -v -- "^--$"

Но это тоже работает!

grep --no-group-separator ...

И он не выплюнул, что "-" или даже пустая строка.

Ответ 2

Существует недокументированный параметр grep: "--group-separator", который переопределяет значение по умолчанию "-". Вы можете установить его в "", чтобы избавиться от двойной тире. Хотя, вы все равно получаете пустую строку. У меня была такая же проблема, и я нашел этот параметр, прочитав исходный код grep.

Ответ 3

Ну, переключатель A по умолчанию добавит эти символы, так что это не тайна.

man grep:

-A NUM

    Places  a  line  containing  a  group  separator  (--)   between
    contiguous  groups  of  matches.  With the -o or --only-matching
    option, this has no effect and a warning is given.

Но вы можете использовать простой sed для очистки результата:

yourgrep | sed '/^--$/d'

Ответ 4

Нет необходимости подключаться к большому количеству greps или использовать другие инструменты (например, sed), если вы используете AWK:

awk '/nmse_gain_constant/{getline;print }' compare.txt

Ответ 5

Одним из решений будет:

grep -A 1 nmse_gain_constant compare.txt | grep -v nmse_gain_constant  | grep -v "\-\-"