vacias una ultimas reemplazar quitar lineas linea eliminar con borrar bash sed

bash - una - sed quitar lineas



Eliminar todas las lĂ­neas que comiencen con un#desde un archivo (8)

Aquí está con un bucle para todos los archivos con alguna extensión:

ll -ltr *.filename_extension > list.lst for i in $(cat list.lst | awk ''{ print $8 }'') # validate if it is the 8 column on ls do echo $i sed -i ''/^#/d'' $i done

Todas las líneas con comentarios en un archivo comienzan con # . ¿Cómo puedo eliminar todas las líneas (y solo esas líneas) que comienzan con # ? Deben ignorarse otras líneas que contengan # , pero no al principio de la línea.


Esta respuesta se basa en la respuesta anterior de Keith .

egrep -v "^[[:blank:]]*#" debería filtrar las líneas de comentarios.

egrep -v "^[[:blank:]]*(#|$)" debe filtrar los comentarios y las líneas vacías, como suele ser útil.

Para obtener información sobre [:blank:] y otras clases de caracteres, consulte https://en.wikipedia.org/wiki/Regular_expression#Character_classes .


Esto se puede hacer con un sed delineador :

sed ''/^#/ d''

Esto dice, "encuentre todas las líneas que comiencen con # y elimínelas, dejando todo lo demás".


Estoy un poco sorprendido de que nadie haya sugerido la solución más obvia:

grep -v ''^#'' filename

Esto resuelve el problema como se dijo.

Pero tenga en cuenta que una convención común es para todo, desde un # hasta el final de una línea que se tratará como un comentario:

sed ''s/#.*$//'' filename

aunque eso trata, por ejemplo, un carácter # dentro de un literal de cadena como el comienzo de un comentario (que puede o no ser relevante para su caso) (y deja líneas vacías).

Una línea que comienza con espacios en blanco arbitrarios seguido de # también se puede tratar como un comentario:

grep -v ''^ *#'' filename

si el espacio en blanco es solo espacios, o

grep -v ''^[ ]#'' filename

donde los dos espacios son en realidad un espacio seguido de un carácter de tabulación literal (escriba "pestaña control-v").

Para todos estos comandos, omita el argumento de filename para leer desde la entrada estándar (por ejemplo, como parte de un conducto).


Lo opuesto a la solución de Raymond:

sed -n ''/^#/!p''

"no imprima nada, excepto las líneas que NO comienzan con #"


Puede usar lo siguiente para una solución awk:

awk ''/^#/ {sub(/#.*/,"");getline;}1'' inputfile


para eliminar el símbolo de comentario (#) pero mantener el resto de la línea y mantener el sha-bang:

awk ''{ if( ($0 !~ /^ *#/) || ($0 ~ /^ *#!/) ) print $0 ; else {gsub(/^ *#/ , "" ); print } } '' teste.sh nter code here


puedes editar directamente tu archivo con

sed -i ''/^#/ d''

Si desea también eliminar líneas de comentarios que comienzan con algunos espacios en blanco

sed -i ''/^/s*#/ d''

Por lo general, usted quiere mantener la primera línea de su script, si es un sha-bang, ¡así que sed no debe eliminar las líneas que comienzan con #! . también debería eliminar líneas, que solo contienen un hash pero no texto. ponlo todo junto:

sed -i ''/^/s*/(#[^!].*/|#$/)/d''