Удалить текст, начинающийся с определенной строки

При использовании мьютекса только поток, заблокировавший мьютекс, может разблокировать этот мьютекс. Однако любой поток может увеличивать или уменьшать значение семафора.

0
16.02.2020, 20:55
3 ответа

Это можно сделать с помощью sed. Общий формат:

sed -n '/pattern1/,/pattern2/p' file

-nзаставляет sedне печатать, если это явно не указано с помощью p. Эта команда напечатает все строки, находящиеся между строкой, соответствующей pattern1, и одной, соответствующейpattern2(включительно ). Если есть несколько совпадений, будет напечатано несколько строк.

В вашем случае вы хотите напечатать все до конца файла, поэтому pattern2будет $. Поэтому вы ищете это:

$ sed -n '/16-02-2020/,$p' file
16-02-2020
The top program provides a dynamic real-time view of a running
   system.  It can display system summary information as well as a list
   of processes or threads currently being managed by the Linux kernel.
   The types of system summary information shown and the types, order
   and size of information displayed for processes are all user
   configurable and that configuration can be made persistent across
   restarts.

Не связанное с этим примечание: fgrepи egrepустарели, вы должны использовать grep -Fи grep -E. См.man grep:

In addition, the variant programs egrep and fgrep are the same as grep -E and grep -F, respectively. These variants are deprecated, but are provided for backward compatibility.

3
28.04.2021, 23:23

Perl-версия:

perl -ne '$f=1 if /16-02-2020/; print if $f' file
2
28.04.2021, 23:23

Для удаления блока из файла, я думаю, ed, который обрабатывает файл как единое целое, а не действует построчно, как это делает sed, является лучшим выбором:

$ ed -s input.txt
1,/^16-02-2020/-1d
wq
$ cat input.txt
16-02-2020
The top program provides a dynamic real-time view of a running
       system.  It can display system summary information as well as a list
       of processes or threads currently being managed by the Linux kernel.
       The types of system summary information shown and the types, order
       and size of information displayed for processes are all user
       configurable and that configuration can be made persistent across
       restarts.

Удаляет все, начиная с первой строки до строки перед той, которая начинается с 16-02-2020, и сохраняет измененный файл. При использовании в сценарии вы можете использовать heredoc для отправки команд наed:

ed -s input.txt <<EOF
1,/^16-02-2020/-1d
w
EOF
1
28.04.2021, 23:23

Теги

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