Dois comandos sed em um comando

3

Eu tenho um arquivo com muitos nomes, etc., e com espaços intermediários. Agora, eu quero excluir todos os espaços à direita e todas as linhas vazias neste arquivo com sed.

Eu tenho dois comandos para essa tarefa, mas gostaria de ter uma combinação dos dois:

sed -i's/\s*$//g' 
sed -i'/^$/d'
    
por Deroom 13.12.2015 / 23:02

2 respostas

9

Com o GNU sed (e provavelmente outros), você pode fornecer vários comandos separados por um ponto-e-vírgula:

sed -i 's/\s*$//g; /^$/d'

Outras implementações sed podem precisar que você forneça os dois comandos separadamente com -e :

sed -i -e 's/\s*$//g' -e '/^$/d'

Por fim, você também pode combiná-los em um script sed :

$ cat foo.sed
s/\s*$//g
/^$/d

Em seguida, você o executa com -f :

$ sed -i -f foo.sed file
    
por 13.12.2015 / 23:58
2

este é o comando que você está procurando:

sed -ne '/[^ ]/s/ *$//p' <in >out

... para linhas que correspondam a pelo menos 1 caractere não-espacial, sed substituirá a correspondência mais longa que puder de 0 ou mais espaços à direita na linha. se bem sucedido (e sempre será, porque nunca falta nada) , a linha é p rinted.

o resultado é que o comando p apenas insere linhas não espaciais e não em branco ao mesmo tempo em que recorta todos os espaços à direita.

    
por 14.12.2015 / 12:47

Tags