una sustituir que por lineas linea empiezan eliminar comentarios caracter buscar archivo linux bash sed

linux - sustituir - ¿Cómo elimino todas las líneas en un archivo a partir de después de una línea coincidente?



sed linux (6)

Esto es un poco más corto que otras soluciones dadas. Salir con mayúscula Q evita imprimir la línea actual.

sed ''/The second line/Q'' file

Para eliminar realmente las líneas, puede usar la misma sintaxis.

sed -i ''/The second line/Q'' file

Tengo un archivo que se compone de varias líneas de texto:

The first line The second line The third line The fourth line

Tengo una cuerda que es una de las líneas: The second line

Quiero eliminar la cadena y todas las líneas después de ella en el archivo, por lo que eliminará The third line y The fourth line además de la cadena. El archivo se convertiría en:

The first line

He buscado una solución en google, y parece que debería usar sed . Algo como:

sed ''linenum,$d'' file

Pero, ¿cómo encontrar el número de línea de la cadena? O bien, ¿de qué otra manera debería hacerlo?


Primero agregue el número de línea y elimine la línea

cat new.txt The first line The second line The third line The fourth line cat new.txt | nl 1 The first line 2 The second line 3 The third line 4 The fourth line cat new.txt | nl | sed "/2/d" 1 The first line 3 The third line 4 The fourth line cat new.txt | nl |sed "3d;4d" 1 The first line 2 The second line

usando awk

awk ''NR!=3 && NR!=4'' new.txt The first line The second line


Si no desea imprimir la línea coincidente (o las siguientes líneas):

sed -n ''/The second line/q;p'' inputfile

Esto dice "cuando llegue a la línea que coincida con el patrón, de lo contrario, imprima cada línea". La opción -n evita la impresión implícita y se requiere el comando p para imprimir líneas explícitamente.

o

sed ''/The second line/,$d'' inputfile

Esto dice "eliminar todas las líneas de la salida comenzando en la línea coincidente y continuando hasta el final del archivo".

pero el primero es más rápido. Sin embargo, dejará de procesar por completo, por lo que si tiene varios archivos como argumentos, los que están después del primer archivo coincidente no se procesarán. En este caso, el formulario de eliminación es mejor.

Si desea imprimir la línea coincidente, pero no las siguientes líneas:

sed ''/The second line/q'' inputfile

Esto dice "imprimir todas las líneas y salir cuando se alcanza la línea coincidente" (no se usa la opción -n (sin impresión implícita)).

Ver man sed para información adicional.


Uso de awk (no muestra la línea coincidente)

awk ''/pattern/ {exit} {print}'' file.txt


awk ''/The second line/{exit}1'' file


sed ''/The second line/q0'' file

O bien, sin gnu sed:

sed ''/The second line/q'' file

O, usando grep:

grep -B 9999999 "The second line"