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''