Digamos que hay un archivo con 7 líneas. P.ej:
a
b
c
#
d
e
Cuando lo ejecuto grep -c '#' -c -v filenamehere
me da 6 líneas.
Quiero que muestre 5 líneas para quitar ese espacio en blanco.
Respuesta1
Tu archivo tieneSietelíneas en él, pero desea contar las líneas que no están vacías y que no comienzan con #
.
$ grep -c '^[^#]' file
5
Esto cuenta el número de líneas que contienen un carácter al principio que no es un #
carácter.
La expresión [^#]
coincide con un único carácter que no es #
. La expresión completa ^[^#]
coincide con un no #
al comienzo de una línea.
Las líneas vacías no coinciden con esta expresión, ni tampoco las líneas que comienzan con #
¹.
Si solo desea contar líneas que no estén vacías:
$ grep -c '.' file
6
Esto cuenta las líneas que contienen al menos un carácter.
Para completar, para contar líneas vacías:
$ grep -c -v '.' file
1
Para contar líneas que están vacías o que comienzan con #
:
$ grep -c -v '^[^#]' file
2
Tenga en cuenta que ambas -c
y -v
son opciones "globales". Cambian el comportamiento de toda la grep
operación cuando se dan en la línea de comando. No tiene sentido especificarlo -c
varias -v
veces y no aceptan argumentos de opciones.
También tenga en cuenta que si especifica el patrón o la expresión regular en cualquier lugar que no sea el primer argumento después de todas las opciones, utilícelo -e 'pattern'
para grep
saber que este es el patrón con el que está buscando. Es decir, utilice cualquiera de los dos
grep -e '.' -c -v file
o
grep -c -e '.' -v file
o
grep -c -v '.' file
GNU grep
reorganizará la línea de comando de tal manera que las opciones aparezcan antes de los operandos de nombre de ruta (a menos que POSIXLY_CORRECT
estén configurados en el entorno), pero generalmente desea escribir código de shell portátil que funcione con cualquier grep
implementación.
¹ las líneas que comienzan con un carácter que no es un carácter (una secuencia de bytes que no forma un carácter válido en el mapa de encanto local del usuario) también se excluirían en la mayoría de grep
las implementaciones. Puedes usar LC_ALL=C grep
para solucionar eso. Esto debería ser algo válido, ya que #
es parte del conjunto de caracteres portátiles, por lo que debería ser invariable en todas las configuraciones regionales de un sistema determinado.