Me gustaría saber si hay una manera en que podría cat
presentar un me gusta php.ini
y eliminar todas las líneas que comienzan con;
Por ejemplo, si el archivo contiene esto:
; - 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
y ejecuté el comando correcto cat | {remove comments command}
, luego terminaría con:
error_reporting = E_ALL & ~E_NOTICE
Nota - Supuse que cat
sería la mejor manera de hacer esto, pero estoy realmente bien con la respuesta usando otra utilidad como awk
, sed
, egrep
, etc.
error_reporting = E_ALL & E_NOTICE ; Show all errors, except for notices
? ¿Debería eliminarse el comentario también en ese caso?cat
es la herramienta para concatenar archivos.grep
es la herramienta para filtrar líneas basadas en patrones.sed
yawk
también puede modificar esas líneas.Respuestas:
Puedes usar:
fuente
No necesita canalizar un archivo a través de grep, grep toma los nombres de archivo como argumentos de línea de comando.
imprimirá todas las líneas, EXCEPTO las que comiencen con un # char. puede cambiar el comentario char a lo que desee.
Si tiene más de un comentario char (suponiendo que esté al principio de una línea)
fuente
grep '^[^;]' filename
. Sin embargo, no puedo hablar de su portabilidad.egrep
esgrep -E
. También se puede usargrep -ve '^[;#]' -e '^//'
egrep
puede ahorrarte el uso decat
. En otras palabras, cree menos procesos (egrep
vscat
+egrep
) y use menos buffers (canalización decat
aegrep
vs sin tubería).En general, es una buena idea limitar el uso de
cat
si simplemente desea pasar un archivo a un comando que pueda leerlo por sí solo.Dicho esto, el siguiente comando eliminará los comentarios, incluso si están sangrados con espacios o pestañas:
fuente
[[
clase de caracteres]]
con el uso delegrep
comando en desuso durante al menos una década más o menos.eso excluirá líneas que comienzan con ';' y líneas vacías.
en regex,
^
indica el comienzo de una línea y$
el final de una línea, por lo que^$
especifica líneas donde el carácter de inicio de línea y el carácter de final de línea están uno al lado del otro.fuente
egrep -v '^;'
egrep -v '^[[:blank:]]*;' file.ini
Una simple
awk
fraseawk '/^;/{next}1' input_file
debería hacer el truco.fuente
awk '!/^;/' input_file
es suficiente.Además de Jaypal, probablemente también lo usaría
awk
para estos fines. Es peor mencionar que Perl a veces es bastante útil para tales propósitos:Las expresiones regulares de Perl son más potentes en comparación con las de awk y, a veces, es posible que las necesites.
fuente
perl -ne 'print unless /^;/' data.txt
cat
funciona bien en estos ejemplos si lo considera como un proxy para el más genérico "cualquier cosa que genere texto en STDOUT". Las pipas Unix son lo mejor desde el pan rebanado, en mi humilde opinión. :)Una elaboración de la respuesta de @ shabunc, que usa Perl para eliminar comentarios (incluidos los comentarios en línea), luego imprime cualquier línea que contenga algo que no sea espacio en blanco.
Explicación:
s/;.*//
usa el operador de sustitución (s/<regex>/<replacement>/
) para reemplazar las instancias de un punto y coma y todo lo que sigue en una línea con la cadena vacía.print if /\S/
imprime la línea si coincide con la expresión regular\S
, que es una clase de caracteres que coincide con todos los caracteres que no son espacios en blanco.fuente
Aquí hay uno que uso, solo sustituyo ';' con el carácter de comentario (por ejemplo, '#' para muchos archivos de configuración del servicio UNIX):
Eso elimina todos los comentarios de línea completa (incluso si tienen espacios en blanco iniciales), y cualquier comentario que finalice las líneas sin comentarios, y también elimina sucintamente las líneas en blanco de la salida. Esto puede ser posible sin la tubería (mi sed o awk-fu no es genial), pero es tan fácil de entender (y recordar), pensé que lo publicaría aquí.
fuente
Ejemplo mostrar solo líneas + no mostrar nuevas líneas o líneas vacías:
O
fuente
egrep
está en desuso por mucho tiempo.grep -E
es el comando que estás buscando aquí.Elimina todos los comentarios y líneas vacías de file.txt
fuente
egrep
es depreciado Usar en sugrep -Ev
lugar.Despojará también las líneas vacías
fuente
puede usar el siguiente comando para guardar las líneas, excluyendo las líneas vacías y las líneas que comienzan con # en un archivo nuevo
cat <file to be read> | egrep -v '^#|^$' > <file to be written at>
fuente
cat
Tubería inútil yegrep
se deprecia y se reemplaza porgrep -E
por expresiones extendidas o simplementegrep -v
.