Gostaria de saber se existe uma maneira de cat
arquivar php.ini
e remover todas as linhas começando com;
Por exemplo, se o arquivo contiver isso:
; - Show all errors, except for notices
;
;error_reporting = E_ALL & ~E_NOTICE
;
; - Show only errors
;
;error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR
;
; - Show all errors except for notices
;
error_reporting = E_ALL & ~E_NOTICE
e executei o comando correto cat | {remove comments command}
, e acabaria com:
error_reporting = E_ALL & ~E_NOTICE
Nota - eu assumi que cat
seria a melhor maneira de fazer isso, mas eu estou realmente bem com a resposta usando outro utilitário como awk
, sed
, egrep
, etc.
error_reporting = E_ALL & E_NOTICE ; Show all errors, except for notices
? O comentário também deve ser removido nesse caso?cat
é a ferramenta para concatenar arquivos.grep
é a ferramenta para filtrar linhas com base em padrões.sed
eawk
também pode modificar essas linhas.Respostas:
Você pode usar:
fonte
Você não precisa canalizar um arquivo através do grep, o grep usa os nomes de arquivo como argumentos da linha de comando.
imprimirá todas as linhas, EXCETO aquelas que começam com um # char. você pode alterar o caractere de comentário para o que desejar.
Se você tiver mais de um caractere de comentário (assumindo que está no início de uma linha)
fonte
grep '^[^;]' filename
. Eu não posso falar sobre a sua portabilidade!egrep
égrep -E
. Pode-se também usargrep -ve '^[;#]' -e '^//'
egrep
você pode economizar o uso decat
. Em outras palavras, menos criar processos (egrep
vscat
+egrep
) e utilizar menos tampões (tubo decat
aegrep
vs não tubo).Geralmente, é uma boa idéia limitar o uso,
cat
se você simplesmente deseja passar um arquivo para um comando que pode lê-lo por si mesmo.Com isso dito, o seguinte comando removerá os comentários, mesmo que sejam recuados com espaços ou guias:
fonte
[[
classe de caracteres mais recente]]
com o uso doegrep
comando descontinuado por pelo menos uma década.isso excluirá linhas que começam com ';' e linhas vazias.
em regex,
^
indica o início de uma linha e$
o final de uma linha; portanto,^$
especifica as linhas nas quais o caractere de início da linha e o final da linha estão próximos um do outro.fonte
egrep -v '^;'
egrep -v '^[[:blank:]]*;' file.ini
Um simples
awk
one-linerawk '/^;/{next}1' input_file
deve fazer o truque.fonte
awk '!/^;/' input_file
é suficiente.Assim como Jaypal, eu provavelmente também usaria
awk
para esses fins. É pior mencionar que o perl às vezes é bastante útil para tais propósitos:Os regexps Perl são mais poderosos em comparação com o awk e, às vezes, você pode precisar deles.
fonte
perl -ne 'print unless /^;/' data.txt
cat
funciona bem nesses exemplos se você o considerar como um proxy para o mais genérico "qualquer coisa que gere texto no STDOUT". Tubos Unix são a melhor coisa desde pão fatiado, imho. :)Uma elaboração da resposta do @ shabunc, usa o Perl para remover os comentários (incluindo comentários embutidos) e depois imprimir todas as linhas que contenham algo que não seja espaço em branco.
Explicação:
s/;.*//
usa o operador de substituição (s/<regex>/<replacement>/
) para substituir instâncias de um ponto-e-vírgula e tudo o que segue em uma linha pela sequência vazia.print if /\S/
imprime a linha se corresponder ao regexp\S
, que é uma classe de caracteres que corresponde a todos os caracteres que não são espaços em branco.fonte
Aqui está um que eu uso, basta substituir ';' com o caractere de comentário (por exemplo, '#' para muitos arquivos de configuração de serviço UNIX):
Isso elimina todos os comentários de toda a linha (mesmo se eles tiverem espaços em branco à esquerda), e qualquer comentário que termine as linhas sem comentários, e remove sucintamente as linhas em branco da saída. Isso pode ser possível sem o pipeline (meu sed ou awk-fu não é reconhecidamente ótimo), mas é tão fácil para eu entender (e lembrar) que achei que o postaria aqui.
fonte
O exemplo mostra apenas linhas + não mostra novas linhas ou linhas vazias:
OU
fonte
egrep
está obsoleto.grep -E
é o comando que você está procurando aqui.Retira todos os comentários e linhas vazias do arquivo.txt
fonte
egrep
é depreciado. Use emgrep -Ev
vez disso.Também tira as linhas vazias
fonte
você pode usar o seguinte comando para salvar as linhas, excluindo linhas vazias e linhas começando com # em um novo arquivo
cat <file to be read> | egrep -v '^#|^$' > <file to be written at>
fonte
cat
Pipe inútil eegrep
é depreciado e deve ser substituídogrep -E
por expressões estendidas ou apenasgrep -v
.