Remove exatamente uma linha em um arquivo

6

Eu tenho um arquivo que contém as seguintes linhas:

SUKsoft:
SUKsoft: App-Conduct_Risk_Comment
SUKsoft: App-Conduct_Risk_R
SUKsoft: App-Conduct_Risk_RW

Como posso remover a linha "SUKsoft:"?

Esta linha pode estar em qualquer lugar do arquivo (começando como está agora ou no meio).

Existe um comando para fazer isso?

    
por user3270648 29.10.2015 / 13:55

4 respostas

3

grep procura por linhas que satisfaçam um padrão. grep -v descarta linhas que satisfazem um padrão.

grep -v '^SUKsoft: *$'

O padrão é: linhas que começam ( ^ ) com SUKsoft: , possivelmente seguidas por espaços, mas nada mais até o final da linha ( $ ).

    
por 200_success 29.10.2015 / 17:59
8

Para remover a linha usada

sed -i '/SUKsoft:\s*$/d' your_file 

Exemplo

% cat foo
SUKsoft: 
SUKsoft: App-Conduct_Risk_Comment   
SUKsoft: App-Conduct_Risk_R
SUKsoft: App-Conduct_Risk_RW

% sed -i '/SUKsoft:\s*$/d' foo

% cat foo                    
SUKsoft: App-Conduct_Risk_Comment   
SUKsoft: App-Conduct_Risk_R
SUKsoft: App-Conduct_Risk_RW
    
por A.B. 29.10.2015 / 14:10
4

Aqui estão os passos para remover a linha desejada:

$ sed 's/SUKsoft: *$//' file.txt

SUKsoft: App-Conduct_Risk_Comment
SUKsoft: App-Conduct_Risk_R
SUKsoft: App-Conduct_Risk_RW

Estou assumindo que file.txt contém as linhas.

Ou

$ sed 's/SUKsoft: *$//; /^$/d' file.txt
SUKsoft: App-Conduct_Risk_Comment
SUKsoft: App-Conduct_Risk_R
SUKsoft: App-Conduct_Risk_RW

não deixa nenhuma linha em branco .

Para editar no arquivo que você pode usar,

sed -i 's/SUKsoft: *$//' file.txt

ou

sed -i 's/SUKsoft: *$//; /^$/d' file.txt

conforme sua necessidade.

Veja a resposta da A.B onde ela é feita de maneira mais compacta. Obrigado ao Wildcard .

    
por souravc 29.10.2015 / 14:02
1

A julgar pelo seu post't raw source não há espaço ou sequência de espaços após "SUKsoft:", no entanto, apenas para estar no lado seguro, este comando cuidará dos que estiverem presentes.

Usando o Perl:

perl -ne '!/^SUKsoft: *$/&&print' input
  • !/^SUKsoft:$/&&print : se a linha atual não corresponder ao padrão ^SUKsoft: *$ , que corresponde a uma linha que começa com SUKsoft: cadeia, seguida por zero ou mais espaços, imprime a linha;
% cat input
SUKsoft:
SUKsoft: App-Conduct_Risk_Comment
SUKsoft: App-Conduct_Risk_R
SUKsoft: App-Conduct_Risk_RW
% perl -ne 'print unless /^SUKsoft: *$/' input
SUKsoft: App-Conduct_Risk_Comment
SUKsoft: App-Conduct_Risk_R
SUKsoft: App-Conduct_Risk_RW
    
por kos 30.10.2015 / 04:36