Как удалить повторяющиеся строки, только если они находятся сразу после друг друга в файле

Допустим, у меня есть следующий файл:

$ cat test.txt
a
-----
b
-----
-----
c
-----
-----
-----
d
-----
e
-----
-----

Теперь я хочу удалить все ----- , но только если они повторяются друг за другом. Результат должен выглядеть так:

a
-----
b
-----
c
-----
d
-----
e
-----

Я пробовал grep -Pvz - "----- \ n -----" , но это не сработало.

3
задан 4 August 2021 в 04:26

1 ответ

Это именно то, для чего предназначена команда 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 или - на месте ).

10
ответ дан 20 August 2021 в 10:30

Другие вопросы по тегам:

Похожие вопросы: