Удалите абзац из файла

Вы уже используете Ghostscript в ps2pdf, таким образом, этот ответ сделал бы это:

gswin32c.exe 
-o c:/path/to/output-cmyk.pdf 
-sDEVICE=pdfwrite 
-dUseCIEColor 
-sProcessColorModel=DeviceCMYK 
-sColorConversionStrategy=CMYK 
-sColorConversionStrategyForImages=CMYK 
 input-rgb.pdf

5
25.03.2015, 19:31
2 ответа

На самом деле, sed также может принимать диапазоны. Эта команда удалит все строки между Match user foo и первой пустой строкой (включительно):

$ sed '/Match user foo/,/^\s*$/{d}' file


Match user bar
        ChrootDirectory /NAS/bar.co.uk/
        ForceCommand internal-sftp
        AllowTcpForwarding no
        GatewayPorts no
        X11Forwarding no



Match user baz
        ChrootDirectory /NAS/baz.com/
        ForceCommand internal-sftp
        AllowTcpForwarding no
        GatewayPorts no
        X11Forwarding no

Лично я бы сделал это, используя режим perl's paragraph (-00), который имеет преимущество удаления ведущих пустых строк:

$ perl -00ne 'print unless /Match user foo/' file
Match user bar
        ChrootDirectory /NAS/bar.co.uk/
        ForceCommand internal-sftp
        AllowTcpForwarding no
        GatewayPorts no
        X11Forwarding no

Match user baz
        ChrootDirectory /NAS/baz.com/
        ForceCommand internal-sftp
        AllowTcpForwarding no
        GatewayPorts no
        X11Forwarding no

В обоих случаях вы можете использовать -i для редактирования файла на месте (это создаст резервную копию оригинального файла с именем -файла. bak):

sed -i.bak '/Match user foo/,/^\s*$/{d}' file

or

perl -i.bak -00ne 'print unless /Match user foo/' file 
5
27.01.2020, 20:38

Немного сложнее, чем ответ Тердона sed,

awk '/foo/ {suppress=1} /^\s*$/ {suppress=0} !suppress' file.php

дает почти точно такой же результат, как и ответ Тердона:

...



Match user bar
        ChrootDirectory /NAS/bar.co.uk/
        ForceCommand internal-sftp
        AllowTcpForwarding no
        GatewayPorts no
        X11Forwarding no



Match user baz
        ChrootDirectory /NAS/baz.com/
        ForceCommand internal-sftp
        AllowTcpForwarding no
        GatewayPorts no
        X11Forwarding no

, т.е. удаляет (подавляет) каждую строку. начиная с той, которая соответствует foo. вверх - по первой последующей строке, которая содержит только пробелы.  Строки 8, 9 и 10, которые пустые во входном файле file.php. (между user foo и user bar) выходит в выходной сигнал.  В отличие от этого, ответ Тердона удаляет каждую строку. начиная с той, которая соответствует foo. вверх - по первой последующей строке, содержащей только белые пробелы; так что 8-я строка удаляется, но 9 и 10 проходят.

Это не совсем то, что просил пользователь.

awk '/foo/ {suppress=1}
     /^\s*$/ && suppress==1 {suppress=2}
     /[^\s]/ && suppress==2 {suppress=0}
     !suppress' file.php

есть.  (Это разбивается на несколько строк для удобочитаемости; его можно ввести все в одной строке).  Когда он видит foo, он переходит в режим подавления #1 (suppress=1).  Когда он видит пустую строку в режиме подавления #1, он переключается в режим подавления № 2.  Когда он видит непустую строку в режиме подавления #2, он переключается в режим 0.  Наконец, он делает очевидное - печатает строки, которые не подавляютed.

1
27.01.2020, 20:38

Теги

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