Me deparei com este código de um livro; o livro diz apenas que 1,/^[ ]*$/d
significa "Excluir da linha 1 até a primeira linha em branco". O que cada personagem significa especificamente?
ed $1 << EOF
1,/^[ ]*$/d
w
q
EOF
Me deparei com este código de um livro; o livro diz apenas que 1,/^[ ]*$/d
significa "Excluir da linha 1 até a primeira linha em branco". O que cada personagem significa especificamente?
ed $1 << EOF
1,/^[ ]*$/d
w
q
EOF
1,/.../
significa o intervalo da 1ª linha a uma linha que corresponde ao padrão entre o/
./^[ ]*$/
corresponde a uma linha que contém 0 ou qualquer número de espaços[ ]*
do início^
ao fim$
da linha.Não está claro se o código na pergunta é intencional e se é uma cópia exata do livro. Não são necessários colchetes em torno de um único espaço. Talvez o autor original quisesse ter um espaço e um caractere de tabulação entre colchetes, que poderiam ser substituídos pela classe de caracteres
[[:blank:]]
.d
é o comando para deletar a linhaw
escreva o arquivoq
saia do editorEsses comandos são enviados por
ed
meio de um documento here , indicado pelo<< EOF
. AEOF
string é um nome semi-arbitrário que está emparelhado com as outrasEOF
quatro linhas abaixo. Deixar oEOF
sem aspas significa que quaisquer variáveis nas linhas intermediárias serão expandidas.A outra coisa a notar aqui é o exemplo sem aspas
$1
. Oed
comando/script será executado em relação ao primeiro parâmetro posicional (argumento para o script ou função) sujeito a mais divisão de espaço em branco e geração de nome de arquivo . O argumento realmente deve ser citado. Para ler mais, consulte Por que meu script de shell engasga com espaços em branco ou outros caracteres especiais? e Implicações de segurança de esquecer de citar uma variável em shells bash/POSIX .Comando e entrada
O
$1
é o nome do arquivo a ser editado e tudo entre os EOFs são comandos paraed
.Descrição golpe a golpe
1,/^[ ]*$/d
1,
comece a partir da linha1
e, neste caso, continue até a primeira ocorrência da string de pesquisa/
indica que estamos prestes a procurar uma string^
indica que queremos corresponder ao início da linha no arquivo[
indica que estamos prestes a especificar muitos caracteres' queremos corresponder a um espaço - normalmente haveria mais caracteres aqui
]
terminou de especificar caracteres*
queremos corresponder a 0 ou mais espaços (ou quaisquer caracteres entre[]
)$
até o final da linha no arquivo/
fechando a buscad
excluir a linhaEm seguida, a próxima linha
w
grava as alterações eq
encerra oed
.Efeito
Se a linha um do arquivo (
$1
) estiver vazia ou tiver apenas espaços (sem tabulações), ela será removida.