Вы уже используете Ghostscript в ps2pdf, таким образом, этот ответ сделал бы это:
gswin32c.exe
-o c:/path/to/output-cmyk.pdf
-sDEVICE=pdfwrite
-dUseCIEColor
-sProcessColorModel=DeviceCMYK
-sColorConversionStrategy=CMYK
-sColorConversionStrategyForImages=CMYK
input-rgb.pdf
На самом деле, 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
Немного сложнее, чем ответ Тердона 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.