processamento de texto shell --sed o Editor Basics

As opções de substituição

1. Alternativamente marcadores
quando Alternativamente, um caso será:

[root@ommleft zd]# more data4.txt
This is a test of the test script.
This is the second test of the test script.
[root@ommleft zd]# sed 's/test/trial/' data4.txt
This is a trial of the test script.
This is the second trial of the test script.

Apenas substitua o caso no primeiro jogo, para substituir o texto que aparece em lugares diferentes, você deve usar as tags de substituição.
Alternativamente marcadores usados como segue:
S / padrão / substituição / as bandeiras
existem quatro tipos de marcas de substituição estão disponíveis:
- os números mostram que o novo texto substitui a correspondência de padrões locais de várias

  • g, mostra que o novo texto substituirá todo o texto correspondente
  • p, mostram que os conteúdos originais da linha a ser impressa
  • w arquivo, substituirá os resultados documento escrito

Especificando correspondente usando uma posição de linha digital, como a segunda linha de partida

[root@ommleft zd]# sed 's/test/trial/2' data4.txt
This is a test of the trial script.
This is the second test of the trial script.

Use g Jogo todos os casos, como segue:

[root@ommleft zd]# sed 's/test/trial/g' data4.txt
This is a trial of the trial script.
This is the second trial of the trial script.

Use p para imprimir a linha original vai se sentir menos útil, por exemplo, como segue:

[root@ommleft zd]# sed 's/test/trial/p' data4.txt
This is a trial of the test script.
This is a trial of the test script.
This is the second trial of the test script.
This is the second trial of the test script.

Alternativamente, uma pluralidade de marcadores podem ser usados ​​ao mesmo tempo, o seguinte em simultâneo com G e P

[root@ommleft zd]# sed 's/test/trial/gp' data4.txt
This is a trial of the trial script.
This is a trial of the trial script.
This is the second trial of the trial script.
This is the second trial of the trial script.

Use w arquivo, o resultado substituição gravada no arquivo, como será escrito para o resultado de substituição em test.txt:

[root@ommleft zd]# sed 's/test/trial/w test.txt' data4.txt
This is a trial of the test script.
This is the second trial of the test script.

2. Substitua os personagens
muitas vezes encontro alguns dos personagens não é fácil de usar no modo de substituição, como barra de costume ao escrever o script (/)
, tais como: sed 's // bin / bash // bin / csh / '/ etc / passwd
exemplo acima usando caractere de escapar escapou ser confuso, pode ser substituído no caracter de comando delimitador outros caracteres:

$ sed  's!/bin/bash!/bin/csh!'  /etc/passwd

No exemplo acima, um ponto de exclamação usado como um separador, o caminho é mais evidente.

Use Endereço

Se o comando atua somente em alguma linha ou linha específica, a linha de endereçamento deve ser utilizado (linha de endereçamento)
Existem dois tipos de linha de endereçamento na edição sed:

  • intervalos de linha expressa em formato digital
  • Texto de viagem filtro de modo
    Ambas as formas usar o mesmo formato para especificar o endereço:
[address] command

Além disso uma pluralidade de comandos de endereço específico podem ser agrupados:

address {
    command1
    command2
    command3
}

1. O número de modo de endereçamento fileira

[root@ommleft zd]# sed '2s/test/trail/' data4.txt
This is a test of the test script.
This is the second trail of the test script.

editor sed para modificar apenas a segunda linha de texto especificado endereço. Também é possível definir o intervalo de endereços de linha, por exemplo, modificar a linha 2,3

[root@ommleft zd]# more data1.txt
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
[root@ommleft zd]# sed '2,3s/dog/cat/' data1.txt 
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy cat.
The quick brown fox jumps over the lazy cat.
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.

Você pode modificar todas as linhas de uma linha para o final do texto, e quando eu não sei quantas linhas de texto quando este método é muito conveniente de usar:

[root@ommleft zd]# sed '3,$s/dog/cat/' data1.txt
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy cat.
The quick brown fox jumps over the lazy cat.
The quick brown fox jumps over the lazy cat.

2. filtros de modo de texto
pode ser usado por um personagem texto de cadeia padrão de linha correspondente substituto direto

[root@ommleft zd]# grep zternc /etc/passwd
zternc:x:1005:1006::/home/zte/PM:/bin/bash
[root@ommleft zd]# sed '/zternc/s/bash/csh/' /etc/passwd
zternc:x:1005:1006::/home/zte/PM:/bin/csh

3. A combinação de comandos
que você precisa para executar vários comandos em uma única linha, podem ser combinadas com as cintas em termos de vários comandos.

[root@ommleft zd]# sed '2{
> s/test/trail/
> s/This/That/
> s/script/text/
> }' data4.txt
This is a test of the test script.
That is the second trail of the test text.

Ou separadas por um ponto e vírgula

[root@ommleft zd]# sed '2{s/test/trail/;s/This/That/;s/script/text/}' data4.txt
This is a test of the test script.
That is the second trail of the test text.

Excluir linha

Se você precisar excluir uma determinada linha de fluxo de texto, você pode usar o comando d Delete.

[root@ommleft zd]# more data2.txt
One line of test text.
Two line of test text.
Three line of test text.
[root@ommleft zd]# sed '2d' data2.txt
One line of test text.
Three line of test text.

Além disso método modo de texto correspondente também pode ser usado para excluir

[root@ommleft zd]# sed '/Two/d' data2.txt 
One line of test text.
Three line of test text.

Excluir linhas também podem ignorar, excluir somente o seguinte primeira linha ea terceira linha

[root@ommleft zd]# sed '1d;3d' data2.txt
Two line of test text.

Ao usar a nota, às vezes não corresponder não reclamar, mas foi eliminada da seguinte forma:

[root@ommleft zd]# sed '/One/,/Five/d' data2.txt
[root@ommleft zd]# 

No exemplo acima, quando combinado com o "One", ele vai abrir a função de apagar linha, depois de não conseguir encontrar "Five", será sempre excluí-lo, fazendo com que a saída está vazia

E inserir texto adicional

editor sed permite que deseja que o fluxo de dados é inserido e linhas de texto adicionais:
1) inserção (insert) comandos (i) adiciona uma nova linha antes da linha especificado;
2) adicional (a acrescentar) de comando (a) a aumentar após uma linha especificada uma nova linha;
pode ser especificado no texto antes de uma linha é inserida, como mostrado abaixo

[root@ommleft zd]# sed '3i\This is an inserted line.' data2.txt
One line of test text.
Two line of test text.
This is an inserted line.
Three line of test text.

Depois de uma linha ou texto adicional, como segue:

[root@ommleft zd]# sed '3a\This is an appended line.' data2.txt
One line of test text.
Two line of test text.
Three line of test text.
This is an appended line.

Se você quiser usar as seguintes operações adicionais no final do texto, sem a necessidade de conhecer a última linha do número da linha:

[root@ommleft zd]# sed '$a\This is an appended line.' data2.txt
One line of test text.
Two line of test text.
Three line of test text.
This is an appended line.

Para inserir ou anexar várias linhas de texto deve ser utilizado para cada linha de uma barra invertida ou inserir novo texto adicional, como segue:

[root@ommleft zd]# sed '1i\
> This is one line of new line\
> This is another line of new line.' data2.txt
This is one line of new line
This is another line of new line.
One line of test text.
Two line of test text.
Three line of test text.

Especifica duas linhas serão adicionadas ao fluxo de dados.

Modifique a linha

Modificar comando (mudança) permite transmitir os dados de conteúdo inteira linha de texto. É o mesmo com inserções e mecanismos de trabalho adicionais precisam especificar a nova linha.

[root@ommleft zd]# sed '2c\Second line.' data2.txt
One line of test text.
Second line.
Three line of test text.

Ele também suporta um modo de texto abordando, usando o seguinte padrão de texto para coincidir com o segundo modificações de linha:

[root@ommleft zd]# sed '/Two/c\This is Second line.' data2.txt
One line of test text.
This is Second line.
Three line of test text.

Ao usar o intervalo de endereço modificado, preste atenção:

[root@ommleft zd]# more data1.txt
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
[root@ommleft zd]# sed '2,3c\This is changed.' data1.txt
The quick brown fox jumps over the lazy dog.
This is changed.
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.

A modificação da segunda concretização não é um por um e terceiros linhas, mas as duas linhas usadas para modificar a nova linha, quando necessário atenção.

comando de conversão

comando de conversão (Transform) (y) é o único processo de caracteres sed comandos individuais do editor. formato de comando de conversão é como se segue:
[endereço] Y / inchars / outchars /
comando de conversão será inchars outchars valor e um mapeamento. Este processo de mapeamento continuará até que o caractere especificado processado.

[root@ommleft zd]# more data5.txt
This is line number 1.
This is line number 2.
This is line number 3.
This is line number 4.
This is line number 1 again.
This is yet another line.
This is the last line in the file.
[root@ommleft zd]# sed 'y/123/789/' data5.txt
This is line number 7.
This is line number 8.
This is line number 9.
This is line number 4.
This is line number 7 again.
This is yet another line.
This is the last line in the file.

Quando inchars outchars e comprimento ao ser dada:

[root@ommleft zd]# sed 'y/12/789/' data5.txt
sed:-e 表达式 #1,字符9:‘y'命令的字符串长度不同

impressão

sed comando para imprimir as informações de fluxo de dados de saída:
. 1) de comando é usado para imprimir linhas de texto P
2), o comando de sinal de igual (=) para imprimir linha No.
3) l (L minúsculo) de comando à lista da linha
1. impressão linha
usada para imprimir linhas existentes

[root@ommleft zd]# sed '/Two/p' data2.txt
One line of test text.
Two line of test text.
Two line of test text.
Three line of test text.

Normalmente corresponder em modo texto, usado em conjunto com -n, linhas escondidas que não são relevantes para mostrar apenas as linhas correspondentes:

[root@ommleft zd]# sed -n '/Two/p' data2.txt
Two line of test text.

Se você quiser ver as linhas originais antes da substituição, você pode usar o seguinte:

[root@ommleft zd]# sed -n '/text/{
> p
> s/line/String/p
> }' data2.txt
One line of test text.
One String of test text.
Two line of test text.
Two String of test text.
Three line of test text.
Three String of test text.

Na realização, para coincidir com o "texto" na linha a ser substituído, desta maneira, pode facilmente comparar as alterações de texto.
2. Imprima o número da linha
pode ser (=) para imprimir os números de linha, você pode ser visto por texto correspondente linha número sinal de igual

[root@ommleft zd]# sed -n '/Two/{
> =
> p
> }' data2.txt
2
Two line of test text.

3. Lista linha
listas (lista) de comando (l) pode ser impresso e fluxo de dados de texto de caracteres ASCII não podem ser impressas.

[root@ommleft zd]# more data6.txt
THis	line	contains	tabs.
[root@ommleft zd]# sed -n 'l' data6.txt
THis\tline\tcontains\ttabs.$

Exemplos posição por meio da guia \ t exibido. À direita cifrões representar um caractere de nova linha.

Processamento de arquivo usando sed

1. Write File
w comando para escrever para a linha de arquivo. O formato do comando é como segue:
[endereço] W nome
nome de arquivo pode ser caminho relativo ou absoluto

[root@ommleft zd]# sed -n '1,3w /home/omm/zd/test3.txt' data3.txt
[root@ommleft zd]# more test3.txt
Line 1
Line 2
Line 3

Se você deseja criar um arquivo de dados através de um texto comum, você pode usar este método para gerar.
Por exemplo, você quer usar o arquivo público / etc / passwd root para gerar todos os usuários configurados

[root@ommleft zd]# sed -n '/^root/w root.txt' /etc/passwd
[root@ommleft zd]# more root.txt
root:x:0:0:root:/root:/bin/bash

2. Os dados lidos a partir do ficheiro
é lido (Leitura) de comando (R) permite inserir um ficheiro de dados separado para o fluxo de dados de
formato de leitura de comandos é como segue:
[endereço] P & lt nome
nome parâmetro especifica o caminho de arquivo absoluto de dados ou um caminho relativo. editor sed será inserido no texto no arquivo após o endereço especificado.

[root@ommleft zd]# more data3.txt
Line 1
Line 2
Line 3
[root@ommleft zd]# more data2.txt
One line of test text.
Two line of test text.
Three line of test text.
[root@ommleft zd]# sed '/Line 2/r data2.txt' data3.txt
Line 1
Line 2
One line of test text.
Two line of test text.
Three line of test text.
Line 3

Após data2.txt a forma de realização irá ser inserido no texto corresponde a linha de texto (Linha 2), que também pode ser usado, claro, sed '2r data2.txt' data3.txtser inserido.
Leia e os dados de exclusão usando os dados para substituir o texto:

[root@ommleft zd]# more notice.std 
Would the following people:
List
please report to the ship's captain.
[root@ommleft zd]# more root.txt
root:x:0:0:root:/root:/bin/bash
[root@ommleft zd]# sed '/List/{
> r root.txt
> d
> }' notice.std
Would the following people:
root:x:0:0:root:/root:/bin/bash
please report to the ship's captain.

Ele pode ser visto usando o comando para ler o arquivo (r root.txt) e comando de texto delete (d) o texto "Lista" no fim de substituir o conteúdo de root.txt aqui Lista desempenhou um papel espaço reservado.

Publicado 75 artigos originais · ganhou elogios 7 · vê 10000 +

Acho que você gosta

Origin blog.csdn.net/zhengdong12345/article/details/101285146
Recomendado
Clasificación