Ответ 1
Я делаю это:
grep ... | grep -v -- "^--$"
Но это тоже работает!
grep --no-group-separator ...
И он не выплюнул, что "-" или даже пустая строка.
У меня есть текстовый файл с именем compare.txt, который я хочу извлечь единственную строку, которая следует за каждой строкой, содержащей шаблон "nmse_gain_constant". Следующая команда меня закрыла:
grep -A 1 nmse_gain_constant compare.txt | grep -v nmse_gain_constant
Но это включает в себя разделительную строку "-" между каждой строкой желаемого текста. Любые простые идеи, как избавиться от линий "-" ?
Я приведу вам пример текста здесь, но символы "-" ошибочно интерпретируются этим веб-сообщением в качестве контрольных символов, и то, что вы увидите, неверно.
Я делаю это:
grep ... | grep -v -- "^--$"
Но это тоже работает!
grep --no-group-separator ...
И он не выплюнул, что "-" или даже пустая строка.
Существует недокументированный параметр grep: "--group-separator", который переопределяет значение по умолчанию "-". Вы можете установить его в "", чтобы избавиться от двойной тире. Хотя, вы все равно получаете пустую строку. У меня была такая же проблема, и я нашел этот параметр, прочитав исходный код grep.
Ну, переключатель 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'
Нет необходимости подключаться к большому количеству greps или использовать другие инструменты (например, sed), если вы используете AWK:
awk '/nmse_gain_constant/{getline;print }' compare.txt
Одним из решений будет:
grep -A 1 nmse_gain_constant compare.txt | grep -v nmse_gain_constant | grep -v "\-\-"