Na verdade, sed
também pode ter intervalos. Este comando irá deletar todas as linhas entre Match user foo
e a primeira linha vazia (inclusive):
$ 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
Pessoalmente, no entanto, eu faria isso usando o modo de parágrafo do perl ( -00
) que tem o benefício de remover as linhas em branco iniciais:
$ 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
Em ambos os casos, você pode usar -i
para editar o arquivo no lugar (isso criará um backup do original chamado file.bak
):
sed -i.bak '/Match user foo/,/^\s*$/{d}' file
ou
perl -i.bak -00ne 'print unless /Match user foo/' file