Допустим, у меня есть следующий файл:
$ cat test.txt
a
-----
b
-----
-----
c
-----
-----
-----
d
-----
e
-----
-----
Теперь я хочу удалить все -----
, но только если они повторяются друг за другом. Результат должен выглядеть так:
a
-----
b
-----
c
-----
d
-----
e
-----
Я пробовал grep -Pvz - "----- \ n -----"
, но это не сработало.
Это именно то, для чего предназначена команда uniq
:
NAME
uniq - report or omit repeated lines
SYNOPSIS
uniq [OPTION]... [INPUT [OUTPUT]]
DESCRIPTION
Filter adjacent matching lines from INPUT (or standard input), writing to OUTPUT
(or standard output).
With no options, matching lines are merged to the first occurrence.
Итак
$ uniq test.txt
a
-----
b
-----
c
-----
d
-----
e
-----
В качестве альтернативы вы можете использовать этот однострочник sed 69. Удалите повторяющиеся последовательные строки из файла (эмулирует "uniq") из Sed One-Liners Explained, Часть III: Выборочное удаление определенных строк и специальных приложений
sed '$!N; /^\(.*\)\n\1$/!P; D' test.txt
, которые могут быть предпочтительнее, если вы хотите отредактировать test.txt
на месте (добавив параметр -i
или - на месте
).