O 'sed' existe em todos os * nixes?

5

Meu aplicativo será executado em todas as versões do sistema operacional baseado em Unix, por exemplo, Linux, MacOS, HP-UX, Sun Solaris, OSX, etc.

Estou usando o seguinte comando sed em um lugar comum para excluir a string encontrada em um arquivo de texto:

sed -i '/string1/d' mytextfile

Isso funcionará em todos os * nixes?

    
por user2172617 18.07.2014 / 08:01

2 respostas

9

Sim, sed está em todas as versões do Unix. É parte do padrão POSIX : todo Unix "oficial" o inclui, e todo o Linux e Distribuições BSD incluem também.

Existem várias versões diferentes do comando sed , com diferentes extensões. Se você mantiver o subconjunto comum de sed opções e idioma descrito por POSIX , então seu comando funcionará em todos os sistemas.

    
por 18.07.2014 / 08:04
7

POSIX não exige sed -i porque é redundante e também não está alinhado com o propósito original de sed . sed foi originalmente criado para editar streams (daí seu nome s tream ed itor), não arquivos. A ferramenta correta no POSIX para editar arquivos de forma não interativa é ed

printf "/text/d\nw" | ed file.txt
Infelizmente, muitos sistemas atuais acham que ed é obsoleto e não o fornece por padrão, mesmo que seja obrigatório pelo POSIX ... Mas pelo menos ele deve ser facilmente instalado na maioria dos sistemas (ao contrário do GNU sed, que pode exigir a compilação do código-fonte).

EDIT: Além disso, ao contrário do que o texto da pergunta implica, o comando d de (s)ed faz mais do que deletar a string dada, ele apaga qualquer linha que a contenha. / p>     

por 18.07.2014 / 09:43