sed: diferença entre “sed 's /\.*//” & “sed' /\-/s/\-.*//gw”

1

Estou aprendendo alguns comandos simples de sed .

Comando # 1

sed 's/\-.*//gw without' tgs.txt

Comando # 2

sed '/\-/s/\-.*//gw with' tgs.txt

Saída 1

$ cat with
2. Databases 
6. Windows
 Raja

Saída # 2

$ cat without 
2. Databases 
6. Windows
 Raja

Diferença entre eles

$ diff with without 
$

Qual é a diferença entre esses dois comandos?

    
por rɑːdʒɑ 29.01.2015 / 06:45

2 respostas

3

Não há diferença entre esses efeitos:

sed 's/\-.*//g'
sed '/\-/s/\-.*//g'

O primeiro formulário atua em todas linhas, o segundo formulário atua apenas nas linhas que correspondem a /-/ usando endereços . Como a ação tomada inclui - , ambas as linhas afetarão apenas aquelas que contiverem - .

Agora, se você tivesse usado /Raja/ como endereço, você só teria visto a última linha em with - ou seja, apenas as linhas que continham Raja e teve a substituição executada. / p>     

por muru 29.01.2015 / 07:01
3

Estes dois comandos sed,

sed 's/\-.*//g'
sed '/\-/s/\-.*//g'

fará o mesmo trabalho. Deixe-me explicar como ..

sed 's/\-.*//g'

substituirá todos os caracteres de - pelo último caractere por uma string vazia. Se uma linha não tiver nenhum caractere - , a substituição não ocorrerá. Ou seja, isso não afeta as linhas que não têm o símbolo hífen - .

sed '/\-/s/\-.*//g'

pesquisará primeiro as linhas que possuem o símbolo - . Se encontrar algum, então ele fará a substituição (substitui todos os caracteres de - pelo último caractere com uma string vazia) nessas linhas.

Portanto, ambos são os mesmos . Seu primeiro comando sed seria suficiente. Você não precisa colocar a condição de pesquisa. Além disso, como - não é um caractere especial, você não precisa escapar dele.

    
por Avinash Raj 31.01.2015 / 10:45