He de archivo, con líneas, contiene ip con la máscara de red
una.b.c.d/24
w.x.y.z/32
etc
Cómo eliminar eliminar fila específica?
estoy usando

sed -ie "s#a.b.c.d/24##g" %filname%

pero después de la eliminación es una cadena vacía en el archivo.

Que se debe ejecutar dentro de un script, con ip como parámetro y también trabajo en freebsd bajo sh.

  • también puede usar grep -v
InformationsquelleAutor evilmind | 2012-11-27

4 Comentarios

  1. 6

    Sed solución

     sed -i '/<pattern-to-match-with-proper-escape>/d' data.txt 

    -i opción de cambiar el archivo original.

    Awk solución

    awk '!/<pattern-to-match-with-proper-escape>/' data.txt
    • esto no funcionará si tenemos una máscara de red separados por ‘/’
    • seguro que lo hará, él sólo tiene que escapar de la barra que indica la máscara de red. Oh, excepto por el error ortográfico en el awk solución.
    • -i no modifica el archivo original. Crea un nuevo archivo y sobrescribe el archivo original, rompiendo los enlaces duros a lo largo del camino.
  2. 4

    El uso de sed:

    sed -i '\|a.b.c.d/24|d' file

    Línea de comandos arg:
    Para la entrada argumento de línea de comandos, dicen 1er argumento($1):

    sed -i "\|$1|d" file

    Reemplazar $1, con adecuado número de argumento como es tu caso.

  3. 2

    Debe utilizar d (borrar) no g. Además, no utilice s (de reemplazo).

    sed -ie '/a.b.c.d\/24/d' %filename%

    En una secuencia de comandos se debe utilizar de esta manera

    IP=$1
    IPA=${IP////\/}
    sed -i /"${IPA}"/d %filename%

    Y los parámetros de secuencia de comandos debe ser llamado de esta manera:

    ./script.sh a.b.c.d/24
    • estoy usando un archivo bash donde ip/subred es un argumento en comamnd línea, ¿qué hacer en este caso?
    • solo déjame un momento
    • Mira ahora la respuesta … 🙂
    • la secuencia de comandos para los clientes y sería difícil de explicar que se necesita para escapar de algunos personajes =\
    • thx, el trabajo perfecto en bash, pero cómo ejecutar con sh en freebsd?
    • Lo siento, no tengo ninguna freebsd aquí.
    • ahora con sh he error: ${IP/…}: Mala sustitución

  4. 1
    perl -i -lne 'print unless(/a.b.c.d\/24/)' your_file

    o en awk si nose desea hacer la edición en contexto:

     awk '$0!~/a.b.c.d\/24/' your_file
    • No te olvides de escapar los puntos en su expresión regular, y agregar los límites de la palabra. 23 no es lo mismo que 123.
    • Ruby versión de la anterior Perl: ruby -i -lne 'print $_ unless $_ =~ /a.b.c.d\/24/' your_file

Dejar respuesta

Please enter your comment!
Please enter your name here