Remova exatamente uma linha em um arquivo

Remova exatamente uma linha em um arquivo

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?

Responder1

Pararemovero uso da linha

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

Responder2

Aqui estão as etapas 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

Presumo que file.txtcontenha 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 nenhumem brancolinha.

Para editar o arquivo que você pode usar,

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

ou

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

conforme sua necessidade.

VerABresposta de onde isso é feito de maneira mais compacta. Graças aCuringa.

Responder3

grepprocura por linhas que satisfaçam um padrão. grep -v descartalinhas que satisfazem um padrão.

grep -v '^SUKsoft: *$'

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

Responder4

A julgar pelo seupost't fonte brutanão há espaço ou sequência de espaços após "SUKsoft:", no entanto, apenas por segurança, este comando cuidará deles, se estiverem presentes.

Usando Perl:

perl -ne '!/^SUKsoft: *$/&&print' input
  • !/^SUKsoft:$/&&print: se a linha atual não corresponder ao padrão ^SUKsoft: *$, que corresponde a uma linha começando com SUKsoft:string seguida de 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

informação relacionada