Как заставить sed удалить второй блок строк в файле?

Примечание. Команда :unset не удаляет псевдонимы.

function move_to_trash () {
        cp -vr "$@" "/home/`whoami`/backup/" && command rm -rf "$@";
}

alias rm='move_to_trash'

Этот код работает для меня, если я хочу удалить файл или каталог.

0
22.09.2021, 16:47
3 ответа

Предполагая, что в остальном файл является правильно -сформированным XML-документом, вы можете использовать xmlstarletдля переформатирования документа. Если сделать это с опцией --recover, утилита выведет первый тег верхнего уровня -и все его содержимое, но отбросит любые другие теги верхнего уровня -.

Пример:

$ xmlstarlet fo --recover --omit-decl --noindent file >newfile
file:9.1: Extra content at the end of the document
<HTML>
^
$ cat newfile
<HTML>
<HEAD>
several header lines
</HEAD>
<BODY>
hundreds of lines of content
</BODY>
</HTML>
2
22.09.2021, 17:42

Просто сделайте наоборот :напечатайте все строки, но завершите работу при первом появлении</HTML>

sed -ni 'p;/<\/HTML>/q' file

Используйте без -iдля первой проверки.

Или проще:

sed -i '/<\/HTML>/q'
0
22.09.2021, 17:51

Та же идея, что и ответ @FelixJN , но с использованием любого awk в любой оболочке на каждом компьютере UNIX:

$ awk '{print}; /<\/HTML>/{exit}' file
<HTML>
<HEAD>
several header lines
</HEAD>
<BODY>
hundreds of lines of content
</BODY>
</HTML>

Сделайте это awk -i inplace 'script' *, если вы хотите выполнять редактирование "на месте" всех ваших файлов одновременно и иметь GNU awk.

0
24.09.2021, 16:54

Теги

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