Aprender sed juntos (1)

Dos artefactos de edición de texto en Unix:  awk y sed . Hemos introducido awk antes.

Aprender juntos awk (1)

Aprender juntos awk (dos)

Aprender juntos awk (3)

Aprender juntos awk (cuatro)

Aprender juntos awk (5)

Así que hoy aprende algo de sed.
Sed es la abreviatura de editor de flujo . Sed puede completar tareas muy complejas mediante simples operaciones de comando en la línea de comando y es una herramienta muy poderosa y útil.

Antes de aprender sed, primero creamos el siguiente archivo de texto para los ejercicios de seguimiento: ejemplo.txt

Este es un archivo de prueba. 
Es el último día de 2018. ¡ 
Espero todo su éxito! 
¡FELIZ AÑO NUEVO!

image.png

Uso básico

Uso básico:

sed "s / expresión regular (o carácter específico que se reemplazará) / carácter de destino / bandera" archivo de operación

(Sugerencia: puede deslizar el dedo hacia la izquierda y hacia la derecha)

Si conoce sed, entonces su aplicación más familiar es usar s para reemplazar texto. Por ejemplo, reemplace 2018 en example.txt con 2019.

$ sed "s/2018/2019/" example.txt

This is a test file. It is the last day of 2019. Hope all you success! HAPPY NEW YEAR!

Si desea reemplazar está en exmaple.txt con was:

$ sed "s/is/was/" example.txt

Thwas is a test file. It was the last day of 2018. Hope all you success! HAPPY NEW YEAR!

Es muy extraño que el is en la segunda línea se reemplaza con was, y el is en la primera línea no se reemplaza, pero "this" se reemplaza con "thwas", esto se debe a que en la línea de comando anterior, sed solo reemplaza por defecto El primero "es" en cada línea .


image.png

Use & para indicar el carácter a reemplazar

Por ejemplo, en example.txt, ponga todos los números entre paréntesis

$ sed "s/[0-9]/(&)/g" example.txt

This is a test file. It is the last day of (2)(0)(1)(8). Hope all you success! HAPPY NEW YEAR!

Entre ellos, [0-9] es solo una expresión regular, lo que significa los números 0-9, y & significa el contenido que desea reemplazar antes. No sabe qué número es, por lo que puede usar & en su lugar. G significa global , lo que significa no solo Solo reemplaza la primera parte de cada línea que cumple las condiciones, pero reemplaza todos los caracteres que cumplen las condiciones.
Para otro ejemplo, cambie la primera letra de cada palabra a una letra mayúscula:

$ sed "s/ [a-z]/\U&/g" example.txt 

This Is A Test File.
It Is The Last Day Of 2018.
Hope All You Success!
HAPPY NEW YEAR

Entre ellos, \ U significa cambiar el elemento coincidente a letras mayúsculas (\ L significa letras minúsculas) , y & significa mantener el patrón después de la transformación.


image.png

Utilice \ 1 y \ 2 para representar coincidencias

\ 1 significa el contenido del primer corchete de la expresión regular.
Por ejemplo, en example.txt, desea agregar todos los números entre paréntesis. Usamos el símbolo & para completar la tarea antes, y también puede usar \ 1 para completar esta tarea a continuación.

$ sed "s/\([0-9]\)/(\1)/g" example.txt

This is a test file. It is the last day of (2)(0)(1)(8). Hope all you success! HAPPY NEW YEAR!

Tenga en cuenta que la expresión regular debe estar entre paréntesis, y los paréntesis deben tener el antónimo "\".
Por ejemplo, debemos eliminar todo lo que esté después de la primera letra minúscula en cada línea.

$ sed "s/\([a-z]\).*/\1/" example.txt 

Th It Ho HAPPY NEW YEAR!

Para ser más complicado, intercambie la primera letra de la primera palabra en cada línea:

$ sed "s/\(.\)\(\S*\)\(.\) /\3\2\1 /" example.txt

shiT is a test file.
tI is the last day of 2018.
eopH all you success!
YAPPH NEW YEAR!

Donde \ S representa un carácter sin espacio .
Aquí hay un punto importante para recordar: el contenido entre paréntesis en la expresión regular se puede citar en la cadena de destino en la forma de \ 1, \ 2, \ 3 ... (hasta 9).


image.png

Área de BANDERA: 1 y 2 indican la posición

Como se mencionó anteriormente, $ sed "s/[0-9]/(&)/g" example.txtel papel de g es decirle a sed que reemplace todos, no solo el primero que cumpla con las condiciones en cada línea.
Entonces, ¿qué sucede si desea reemplazar solo el segundo que cumple con la condición? Luego, puede usar un número en el área de la bandera para indicar cuál cumple la condición. Como

$ sed 's/[0-9]/(&)/2' example.txt

This is a test file. It is the last day of 2(0)18. Hope all you success! HAPPY NEW YEAR!

El 2 aquí significa encerrar el segundo número de cada línea entre paréntesis.


image.png

Área de BANDERA: / p significa generar la línea modificada

El parámetro -n de sed significa que no se emite ningún resultado

$ sed -n  's/[0-9]/(&)/2' example.txt

# 没有输出结果

Si agregamos p al área de la bandera, seremos capaces de generar las líneas modificadas y no se generarán otras líneas. So -n yp se usan a menudo en combinación

$ sed -n 's/[0-9]/(&)/2p' example.txt

It is the last day of 2(0)18.


image.png

Área de BANDERA: / w muestra el resultado

Utilice el formato " / w nombre de archivo " y envíe el resultado al archivo tt.txt de la siguiente manera:

$ sed 's/[0-9]/(&)/w tt.txt' example.txt

This is a test file. It is the last day of (2)018. Hope all you success! HAPPY NEW YEAR!

$ cat tt.txt
It is the last day of (2)018.

Tenga en cuenta que la salida aquí es solo la salida de línea procesada, la línea sin procesar no se enviará a tt.txt , por lo que no es lo mismo que la salida usando la redirección ">" !


image.png

Área de BANDERA: / I significa ignorar mayúsculas y minúsculas

Como

$ sed 's/t/HHHH/I' example.txt

HHHHhis is a test file. IHHHH is the last day of 2018. Hope all you success! HAPPY NEW YEAR!

Tanto la T mayúscula como la t minúscula han sido reemplazadas por HHHH.

****** Cien lecturas es mejor que una práctica **********

===== EL FIN ====

image.png


Supongo que te gusta

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