Aprender juntos sed (3)

Primero mira la siguiente pieza de código Python desordenado

 4. import random

 5.

 6.

 7. def rabinMiller(num):

 8.     # Returns True if num is a prime number.

 9.

10.     s = num - 1

11.     t = 0

12.     while s % 2 == 0:

Este es el comienzo de un fragmento de código Python copiado de Internet. El formato es muy confuso, hay números de línea, hay demasiadas líneas y espacios en blanco, este tipo de código de copia directa no se puede ejecutar directamente, debe poner manualmente estos símbolos inútiles Eliminar. Para cientos o miles de líneas de código, si elimina manualmente demasiados problemas, incluso si utiliza algunas funciones de reemplazo del editor de texto, es posible que no logre su objetivo correctamente. Este es el momento para que sed muestre su talento.

  • Eliminar líneas en blanco (para un bloque de código Python, las líneas en blanco producirán errores)
  • Elimine el número de línea para alinear el código a la izquierda
  • Eliminar notas (líneas que comienzan con el signo #)
sed -e 's/^...//g' -e '/^$/d' -e '/^\s*#/d' -e 's/^.//g' tt.txt

El código anterior especifica 4 comandos sed a través del parámetro -e, que eliminan respectivamente los primeros tres caracteres (número de línea) al comienzo de cada línea, eliminan las líneas en blanco, eliminan las líneas de comentario que comienzan con el signo # (\ s representa un carácter de espacio), eliminan cada El primer carácter de la línea está justificado a la izquierda. Luego obtuvimos el formato de código estándar de Python.

import random
def rabinMiller(num):
    s = num - 1
    t = 0
    while s % 2 == 0:

Aprender juntos sed (3)

{}: Comandos sed anidados

Para comandos sed más complejos, puede usar llaves para agrupar diferentes comandos, como el código de Python anterior. Si desea organizar el código entre 4-100 líneas, primero puede especificar el rango de línea y luego usar las llaves para agrupar Se combinan diferentes comandos sed.

sed -n '
    4,100{
        s/^...//g
        /^$/d
        /^\s*#/d
        s/^.//g
        p
    }
`

Aprender juntos sed (3)

r: leer archivo

Aquí necesitamos dos archivos para la demostración, cree otro archivo de texto example1.txt, de la siguiente manera

The other test file.
ID 0000124
Test END!

Si queremos insertar el archivo exemple1.txt en la segunda línea del archivo example.txt

sed '2r example1.txt' example.txt
# This is a test file.
# It is the last day of 2018.
# The other test file.
# ID 0000124
# Test END!
# Hope all you success!
# HAPPY NEW YEAR!

Si desea insertar en la última línea del archivo example.txt

sed '$r example1.txt' example.txt

Si desea insertar el archivo después de la línea número 8

sed '/8/r example1.txt' example.txt
# This is a test file.
# It is the last day of 2018.
# The other test file.
# ID 0000124
# Test END!
# Hope all you success!
# HAPPY NEW YEAR!

Aprender juntos sed (3)

a o i: agregar una línea de cadena

Por ejemplo, queremos agregar una línea "ESTE es el medio del archivo" después (a) o antes (i) de la segunda línea del archivo example.txt

sed '2a THIS is the middle of the file' example.txt
# This is a test file.
# It is the last day of 2018.
# THIS is the middle of the file
# Hope all you success!
# HAPPY NEW YEAR!

sed '2i THIS is the middle of the file' example.txt
# This is a test file.
# THIS is the middle of the file
# It is the last day of 2018.
# Hope all you success!
# HAPPY NEW YEAR!

Tanto a como i podemos agregar filas, la diferencia es que a (agregar) se agrega después de la fila especificada e i (insertar) se agrega antes de la fila especificada.

Aprender juntos sed (3)

c: modificar la línea

Por ejemplo, si queremos modificar la segunda línea del archivo example.txt a "Es el primer día de 2019", podemos usar el parámetro c (cambiar) para modificarlo.

sed '2c It is the first day of 2019' example.txt
# This is a test file.
# It is the first day of 2019
# Hope all you success!
# HAPPY NEW YEAR!

Aprender juntos sed (3)

"=": número de línea de salida

Aprendí awk antes, combinado con "wc -l", puede generar el número de líneas en un archivo.

wc -l example.txt | awk '{print $1}' 
# 4

Por supuesto, una forma más sencilla es usar "=" para generar el número de línea en sed. El uso es el siguiente:

sed -n '$=' example.txt
# 4

También podemos filtrar las filas que cumplen ciertas condiciones, como generar la cantidad de filas que comienzan con "H".

sed -n '/^H/=' example.txt
# 3
# 4

Aprender juntos sed (3)

y: carácter de conversión

Por ejemplo, para convertir todo "a" en "A":

sed 'y/a/A/' example.txt
# This is A test file.
# It is the lAst dAy of 2018.
# HopeAll you success!
# HAPPY NEW YEAR!

Aprender juntos sed (3)

l: carácter de control de visualización

Es especialmente útil cuando se buscan errores, mostrando caracteres de control de texto que normalmente no se muestran.

sed -n 'l' example.txt
# This is a test file.$
# It is the last day of 2018.$
# Hope all you success!$
# HAPPY NEW YEAR!$

Se agrega un "$" al final de cada línea para indicar el final de la línea.

Cien lecturas es mejor que una práctica

===== EL FIN ====

Materiales de referencia: http://www.grymoire.com/Unix/Sed.html#uh-30

Aprender juntos sed (3)

Supongo que te gusta

Origin blog.51cto.com/15069450/2577350
Recomendado
Clasificación