Eu tenho visto muitas sed
ultimamente, e acho que é um comando bastante confuso. As páginas de manual não foram particularmente úteis, mas sei que podem ser usadas para analisar a saída de outros comandos.
O que exatamente é sed
e para que serve? Estou procurando uma resposta abrangente que cubra o que sed
é, com que frequência é usada e alguns exemplos / sintaxe básicos.
command-line
sed
Seth
fonte
fonte
Sed is a stream editor. A stream editor is used to perform basic text transformations on an input stream (a file or input from a pipeline). While in some ways similar to an editor which permits scripted edits (such as ed), sed works by making only one pass over the input(s), and is consequently more efficient. But it is sed's ability to filter text in a pipeline which particularly distinguishes it from other types of editors.
info sed
tem muito mais queman sed
. Então,/usr/share/doc/sed
lá dentrosedfaq.txt.gz
.Respostas:
No uso básico, é usado para 'pesquisar e substituir' por strings.
echo "The quick brown fox jumps over the lazy dog" | sed 's/dog/cat/'
retorna
"The quick brown fox jumps over the lazy cat"
O Sed realmente brilha quando expressões regulares são usadas com ele.
Você gostaria de dar uma olhada neste artigo sobre
sed
, é bem abrangente.fonte
Definições
Sistema Unix V: um guia prático , livro de Mark Sobell:
Página de manual do sed (GNU sed) 4.2.2:
Minha definição informal:
Sed
(abreviação de editor de fluxo ) é um utilitário de processamento de texto que foi desenvolvido no momento em que o texto foi processado uma linha por vez, mas continua sendo um dos mais poderosos utilitários Unix / Linux; ao mesmo tempo, é uma forma de linguagem de script, projetada especificamente para o processamento de texto.Usos
Como as definições sugerem,
sed
é usado para processar em lote linhas de texto, arquivos de texto e fluxos de texto canalizados. Com mais freqüência, é usado para substituir e excluir texto:No entanto, também pode ser usado para imitar o comportamento de outros comandos.
dmesg | head -n 3
(imprimir as 3 primeiras linhas), nós podemos fazerdmesg | sed -n 1,3p
.dmesg | grep 'wlan0'
(procurando por uma string), podemos fazerdmesg | sed -n '/wlan0/p'
A grande vantagem que
sed
tem sobre outros utilitários de processamento de texto é a-i
flag, o que significa que não podemos apenas enviar o texto editado para a tela, mas salvar a edição no arquivo original.awk
os sabores, por outro lado, só têm esse recurso naGNU awk
versão.sed
pode receber entrada na linha de comando, com vários padrões separados por ponto e vírgula (;
) ou em um arquivo de script especificado após o-f
sinalizador, por exemplocat someTextfile.txt | sed -f myScript.sed
Aplicações e exemplos Sed
Sed one-liners
Manipulação de texto com sed, Linux Journal
sed - 20 exemplos para remover / excluir caracteres de um arquivo
Sed Script - Inverter nomes
Como posso substituir uma string em um arquivo?
Como posso excluir todas as segundas linhas de um arquivo?
fonte
sed
é um comando poderoso que permite fazer coisas (remover linhas, substituição de strings, filtragem de strings, etc.).Eu poderia lhe dar uma lista de usos com args, mas a Internet está cheia disso. A pesquisa
sed usage by examples
me trouxe muitos resultados, o mais fofo: http://www.thegeekstuff.com/2009/10/unix-sed-tutorial-advanced-sed-substitution-examples/fonte
Esta resposta é um trabalho em andamento - faltam mais exemplos sobre o comando susbstitute
O que é
sed
?sed
= Stream EDitorA descrição na página de manual dos
sed
relatórios GNU 4.2.2:A descrição na página GNU
sed
em gnu.org relata:Para que é
sed
utilizado?Ele pode ser usado para executar modificações complexas nos fluxos de dados (geralmente texto, mas também pode ser usado para modificar dados binários).
Entre os casos mais comuns de uso, existem:
Esses são os casos de uso abordados nesta resposta.
Uso
sed
lê a entrada de um arquivo armazenado no sistema de arquivos se um nome de arquivo for especificado nos argumentos da linha de comandos durante sua chamada ou a partir destdin
se nenhum nome de arquivo for especificado.Chamada mínima usando um arquivo armazenado no sistema de arquivos:
Chamada mínima usando
stdin
:Olá Mundo!
sed
por padrão, lê o arquivo de entrada linha por linha; lê uma linha, remove a nova linha à direita da linha e coloca a linha processada em um "espaço padrão"; finalmente, ele executa os comandos listados no conteúdo atual do espaço padrão e lê uma nova linha do arquivo de entrada.Quando nenhum comando é especificado ou quando um
p
ou umd
comando é especificado *,sed
sempre será impresso o conteúdo atual do espaço do padrão seguido por uma nova linha a cada iteração, independentemente:Para impedir que este possa ser chamado
sed
junto com o-n
comutador:* Falando apenas para os comandos
p
,d
es
, que são os comandos abordados nesta resposta.Seleção de linhas
sed
pode processar o arquivo de entrada inteiro ou processar apenas linhas selecionadas do arquivo de entrada; a seleção das linhas do arquivo de entrada a ser processado é feita especificando "endereços"; um endereço pode ser (entre outras coisas) um número de linha ou um padrão; intervalos de linhas podem ser selecionados especificando intervalos de endereços.As combinações possíveis de endereços são:
<N>
(onde<N>
está um número): os seguintes comandos / comandos serão executados apenas no número da linha<N>
;<N>,<M>
(onde<N>
e<M>
são dois números,<N>
><M>
): os seguintes comandos / comandos serão executados em linhas que variam do número da linha<N>
ao número da linha<M>
inclusive;/<pattern>/
(onde<pattern>
é uma expressão regular básica ou estendida): os seguintes comandos / comandos serão executados apenas nas linhas que contêm uma ocorrência de<pattern>
;/<pattern1>/,/<pattern2>/
(Onde<pattern1>
e<pattern2>
são básicos ou expressões regulares estendidas): a sequência de comando / comandos será executado em linhas que vão desde a primeira linha contendo uma ocorrência de<pattern1>
para a linha seguinte contendo uma ocorrência de<pattern2>
, várias vezes, no caso de múltiplos ordenados<pattern1>
-<pattern2>
ocorrências;<N>,/pattern/
(Onde<N>
é um número e<pattern>
é uma expressão regular básica ou estendida): os seguintes comandos / comandos serão executados em linhas que variam do número da linha<N>
à primeira linha que contém uma ocorrência de<pattern>
;/pattern/,<N>
(Onde<pattern>
é uma expressão regular básica ou estendida e<N>
é um número): os seguintes comandos / comandos serão executados em linhas que vão da primeira linha contendo uma ocorrência de<pattern>
até o número da linha<N>
;A seleção realizada para imprimir, excluir ou executar substituições em intervalos de linhas sempre incluirá as linhas correspondentes aos endereços especificados; além disso, a seleção realizada para imprimir, excluir ou executar substituições em intervalos de linhas usando padrões é lenta e global (ou seja, cada intervalo afetado será sempre o menor possível e vários intervalos serão afetados).
Ao imprimir intervalos de linhas ou imprimir apenas linhas nas quais uma substituição foi executada, é necessário chamar
sed
junto com a-n
opção para evitar que as linhas correspondentes ao critério sejam impressas duas vezes (isso ocorre apenas ao imprimir intervalos de linhas) e em ordem para impedir que as linhas não correspondam ao critério a ser impresso independentemente.Uma seleção de linhas a serem processadas deve ser seguida por um comando ou por vários comandos separados por ponto e vírgula agrupados usando chaves.
Comandos: imprimir, excluir
Os comandos usados para imprimir ou excluir uma seleção são, respectivamente:
p
: imprime linhas correspondentes ao endereço / intervalo de endereços especificado;d
: exclui linhas correspondentes ao endereço / intervalo de endereços especificado;Quando um desses comandos não é precedido por um endereço / seleção, o comando é executado globalmente, ou seja, em cada linha do arquivo de entrada.
Exemplos: imprimir, excluir
Impressão / exclusão de linhas especificando endereços numéricos:
Arquivo de exemplo:
<N>
:<N>
:<N>
para<M>
inclusive:<N>
para<M>
inclusivo:Impressão / exclusão de linhas especificando padrões:
Arquivo de exemplo:
<pattern>
:<pattern>
:<pattern1>
à linha correspondente<pattern2>
inclusive:<pattern1>
à linha correspondente<pattern2>
inclusive:Comando: substitute
O comando usado para executar uma substituição em uma seleção é:
s
: substitui as linhas correspondentes ao endereço / intervalo de endereços especificado;Quando este comando não é precedido por um endereço / seleção, o comando é executado globalmente, ou seja, em cada linha do arquivo de entrada.
A sintaxe do
s
comando é:Barras são "delimitadores"; eles são usados para delimitar a
<pattern>
,<replacement_string>
e<pattern_flags>
seções;O delimitador é sempre o caractere imediatamente após o
s
comando; pode ser definido para qualquer outro caractere, por exemplo|
:<pattern>
é uma expressão regular básica ou estendida;<replacement_string>
é uma cadeia fixa que pode incluirsed
sequências específicas com um significado especial;<pattern_flags>
é uma lista de sinalizadores que modificam o comportamento de<pattern>
.sed
Sequências específicas mais comuns com um significado especial:&
: referência anterior substituída pela string correspondida por<pattern>
;\<N>
(onde<N>
está um número): referência anterior substituída pelo<N>
grupo capturado em<pattern>
;Sinalizadores mais comuns:
g
: força<pattern>
a combinar globalmente, ou seja, várias vezes em cada linha;i
: forças<pattern>
para combinar com maiúsculas e minúsculas;p
: imprime linhas nas quais uma substituição foi executada mais uma vez (útil ao usar a-n
chave nosed
de imprimir para imprimir apenas as linhas nas quais uma substituição foi executada);Exemplos: substituto
Arquivo de exemplo:
<pattern>
com<replacement_string>
em cada linha:<pattern>
com<replacement_string>
em cada linha:<pattern1>
e substituindo todas as ocorrências de<pattern2>
por<replacement_string>
:<pattern1>
e substituem todas as ocorrências de<pattern2>
por<replacement_string>
:fonte