Pelo padrão POSIX página em sed
:
The script shall consist of editing commands of the following form:
[address[,address]]functionwhere
function
represents a single-character command verb from the list in Editing Commands in sed, followed by any applicable arguments.
Portanto, o primeiro caractere não em branco após o endereço é tomado como um verbo de comando - em seu caso particular, é /
, portanto, o erro: char 9: unknown command: '/'
.
As chaves são referenciadas mais abaixo:
[2addr] {editing command editing command ... }Execute a list of 'sed' editing commands only when the pattern space is selected. …
[ 2addr ] é um indicador de que o número máximo de endereços permitidos é dois.
Para esclarecer um ponto acima, a seção Endereços de sed(1)
diz:
Sed
commands can be given with no addresses, in which case the command will be executed for all input lines; with one address, in which case the command will be executed only for input lines which match that address; or with two addresses, in which case the command will be executed for all input lines which match the inclusive range of lines starting from the first address and continuing to the second address. Three things to note about address ranges: the syntax is addr1,addr2 (i.e., the addresses are separated by a comma);
… (and other stuff not relevant to this discussion) …
A página de informações do gnu ( info sed
) tem um descrição semelhante de {
e }
,
em "3.4 Comandos Freqüentemente Utilizados":
{ COMMANDS }A group of commands may be enclosed between
{
and}
characters. This is particularly useful when you want a group of commands to be triggered by a single address (or address-range) match.
Caso contrário, chaves são usadas para aplicar vários comandos no mesmo endereço ou para aninhar endereços.
O padrão não é muito explícito aqui 1 mas a chave esquerda {
é na verdade um comando que inicia um grupo de outros comandos sed (o grupo termina com uma chave direita }
).
E, com o risco de realmente passar TL; DR , a questão é
que 195
, 210
e /add/
são todos endereços .
Nenhum comando sed
pode ser chamado com três endereços.
Então, o caminho para fazer o seu comando funcionar
é invocar o comando {
no intervalo de endereços 195,210
,
e, em seguida, dentro desse intervalo, invoque o comando p
no endereço /add/
.
1:
no entanto, se você ler a página inteira, será mencionado que: Comanda verbos diferentes de {, a , b , < strong> c , i , r , t , w , : e # podem ser seguidos por ...