nomina - líneas de eliminación de sed que no contienen una cadena específica
sed linux (3)
Desea imprimir solo aquellas líneas que coincidan con ''texto'' o ''blah'' (o ambos), donde la distinción entre ''y'' y ''o'' es bastante crucial.
sed -n -e ''/text/{p;n;}'' -e ''/blah/{p;n;}'' your_data_file
El -n
significa que no se imprime por defecto. El primer patrón busca ''texto'', lo imprime si coincide y salta a la siguiente línea; el segundo patrón hace lo mismo para ''blah''. Si la ''n'' no estaba allí, una línea que contenía ''texto y bla'' se imprimiría dos veces. Aunque podría haber usado simplemente -e ''/blah/p''
, la simetría es mejor, especialmente si necesita extender la lista de palabras coincidentes.
Si su versión de sed
admite expresiones regulares extendidas (por ejemplo, GND sed
hace, con -r
), entonces puede simplificar eso para:
sed -r -n -e ''/text|blah/p'' your_data_file
Soy nuevo en sed
y tengo la siguiente pregunta. En este ejemplo:
some text here
blah blah 123
another new line
some other text as well
another line
Quiero eliminar todas las líneas, excepto las que contienen cadena ''texto'' o cadena ''blah'', por lo que mi archivo de salida se ve así:
some text here
blah blah 123
some other text as well
¿Alguna pista de cómo se puede hacer esto usando sed
?
Esto podría funcionar para usted:
sed ''/text/|blah/!d'' file
some text here
blah blah 123
some other text as well
Simplemente podrías hacerlo a través de awk,
$ awk ''/blah|text/'' file
some text here
blah blah 123
some other text as well