Entorno de producción de Linux, las habilidades "Sed" más utilizadas

sedEl comando es ampliamente utilizado y fácil de usar, y es una herramienta para el procesamiento rápido de texto. De hecho, no tiene muchas habilidades. La recitación y el uso son los canales de aprendizaje más adecuados. Son habilidades difíciles. Pero es complicado porque hay demasiadas funciones avanzadas. Este artículo no presta atención a las funciones avanzadas de sed, solo para explicar algunas operaciones de uso común.

Con el uso, encontrará que vimcomparte algunos conceptos entre sí. La sintaxis de las expresiones regulares es básicamente la misma, y ​​no hay mucho costo de aprendizaje. Desde una perspectiva personal y la eficiencia del trabajo, el comando sed es una herramienta importante que los programadores deben dominar.

Aquellos que dicen que pueden usar Google en el acto, principalmente para copiar el texto en Excel, muelen lentamente a los trabajadores extranjeros, incluso más problemas cuando encuentran una gran cantidad de documentos. No es que una familia no entre a la casa, este artículo no está escrito para usted.

Una entrada simple

Como se muestra, un simple sed de mando se compone de tres partes principales: 参数, 范围, 操作. El archivo a operar puede colgarse directamente al final de la línea de comando. Además de la línea de comando, sed también puede especificar un script sed a través del parámetro -f. Este es un uso avanzado y no se describirá demasiado.

Repetiré algunos comandos de ejemplo muchas veces. Si eres lo suficientemente inteligente como para encontrar el patrón, a veces ni siquiera puedes explicarlo.

Parámetro

-n  Este parámetro significa --quieto --silent. Indica que se ignora la salida del proceso de ejecución y solo se pueden generar nuestros resultados.

Utilizamos hay otro argumento: -i.

Después de usar este parámetro, todos los cambios se ejecutarán en el archivo original. Su salida sobrescribirá el archivo original. Muy peligroso , asegúrese de prestar atención.

Alcance

1,4  significa encontrar el contenido de las líneas 1, 2, 3, 4 en el archivo.
La designación de este rango es muy flexible, consulte el siguiente ejemplo (reemplace la parte del rango en la figura usted mismo).

5  Seleccione la línea 5.
2,5  Seleccione de 2 a 5 líneas, un total de 4 líneas.
1 ~ 2  seleccione filas impares.
2 ~ 2  seleccione líneas pares. El efecto de
2, +3  y 2,5es el mismo, un total de 4 líneas.
2, $  Desde la segunda línea hasta el final del archivo.

La selección de rango también puede usar coincidencias regulares. Vea el ejemplo a continuación.

/ sys /, +3  selecciona la línea donde aparece sys y las siguientes tres líneas.
/ \ ^ sys /, / mem /  selecciona los datos entre la línea que comienza con sys y la línea donde aparece la palabra mem.

Por intuición, los siguientes comandos corresponden a la introducción anterior uno por uno, y puede haber espacios entre el alcance y la operación.

sed -n '5p' file
sed -n '2,5 p' file
sed -n '1~2 p' file
sed -n '2~2 p' file
sed -n '2,+3p' file
sed -n '2,$ p' file

sed -n '/sys/,+3 p' file
sed -n '/^sys/,/mem/p' file

Operación

La operación más común es pimprimir. Por ejemplo, los siguientes dos comandos son equivalentes:

cat file
sed -n 'p' file

Además de la impresión, existen las siguientes operaciones, que comúnmente utilizamos.

p  Imprima el contenido correspondiente.
d  Eliminar el contenido coincidente. En este momento, es necesario eliminar los -nparámetros, piense por qué.
w  Escriba el contenido correspondiente en otro lugar.

a, i, cY otras operaciones, aunque básicas, pero con menos, no describe. Todavía tomamos algunos comandos para ilustrar.

sed -n '2,5 p' file
sed    '2,5 d' file
sed -n '2,5 w output.txt' file

Echemos un vistazo a lo que puede hacer el comando sed y pruébelo.

Eliminar todas las líneas que comienzan con # y líneas en blanco.

sed -e 's/#.*//' -e '/^$/ d' file

El más utilizado, como el siguiente.

sed -n '2p' /etc/group

Imprima la segunda línea en el archivo del grupo.

1、参数部分 比如 -n
2、模式部分 比如'2p'
3、文件,比如/etc/group

Entonces, ¿qué pasa si quiero ejecutar varios comandos al mismo tiempo y no quiero escribir archivos de script sed? Luego debe agregar el parámetro -e.

La unidad de operación de sed es .

Modo de reemplazo

Lo anterior es sedun patrón de coincidencia común para los comandos, pero también tiene un poderoso patrón de reemplazo, lo que significa encontrar y reemplazar algunos de los valores y generar los resultados. Usar el modo de reemplazo rara vez usa -nparámetros.

Hay muchos parámetros para el modo de reemplazo, pero se pueden omitir tanto la primera como la quinta parte. Después del reemplazo, se generará el texto completo .

La primera mitad se usa para hacer coincidir algunos rangos, mientras que la segunda mitad realiza acciones de reemplazo.

Alcance

Este rango es similar a la sintaxis de rango anterior. Vea el ejemplo a continuación.

/ sys /, +3  selecciona la línea donde aparece sys y las siguientes tres líneas.
/ \ ^ sys /, / mem /  selecciona los datos entre la línea que comienza con sys y la línea donde aparece la palabra mem.

Los comandos específicos son:

sed '/sys/,+3 s/a/b/g' file
sed '/^sys/,/mem/s/a/b/g' file

Comando

El comando aquí se refiere al s. Ese es el significado de sustituto.

Encuentra una pareja

La sección de búsqueda encontrará la cadena que se reemplazará. Esta parte puede aceptar cadenas puras o expresiones regulares. Vea el ejemplo a continuación.

a  Encuentra la cadena en la línea de rango a.
[a, b, c]  Encuentre la cadena a o b o c de la línea de rango.

El comando es similar:

sed 's/a/b/g' file
sed 's/[a,b,c]/<&>/g' file#这个命令我们下面解释

Reemplazar

Es hora de reemplazar la cadena encontrada. El contenido de esta sección reemplazará el contenido encontrado en la sección Buscar coincidencia.

Es una pena que la regularidad no se pueda utilizar en esta parte. De uso común es el reemplazo preciso. Por ejemplo, reemplace a con b.

Pero también hay características avanzadas. Python y Java o api regulares similares, la sustitución sed también ha Matched Patternsignificado, también se pueden obtener Group, no la parte inferior. Los sustitutos comúnmente utilizados son &.

&No., repítelo de nuevo. Cuando se usa en la cadena de reemplazo, representa los datos originales de búsqueda coincidentes.

[&]  Indica que los datos encontrados están rodeados por [].
"&"  Indica que los datos buscados están rodeados por "".

El siguiente comando incluirá cada línea en el archivo con comillas.

sed 's/.*/"&"/' file

parámetro de bandera

Estos parámetros se pueden usar individualmente o en múltiplos, solo se introducen los más utilizados.

 Por defecto, g solo coincide con la primera aparición de la línea. Agregue g para reemplazar el texto completo. De uso general.
p  Cuando -nse utiliza el parámetro, psolo se emitirá el contenido de la línea correspondiente.
w es  similar al modo w anterior, pero solo genera líneas transformadas.
El  parámetro i es más importante y significa que se ignora el caso.
e  significa ejecutar un comando para cada línea que se generará. No recomendado, puede usar xargs para completar esta función.

Mire la sintaxis de los dos comandos:

sed -n 's/a/b/gipw output.txt' file
sed 's/^/ls -la/e' file

Divertido

Debido a la regularidad, muchos personajes necesitan escapar. Va a hacer mucho en el guión \\, \*el procesamiento y similares. Puede usar |^@!cuatro caracteres para reemplazar \.
Por ejemplo, los siguientes cinco comandos son iguales.

sed '/aaa/s/\/etc/\/usr/g' file
sed '/aaa/s@/etc@/usr@g' file
sed '/aaa/s^/etc^/usr^g' file
sed '/aaa/s|/etc|/usr|g' file
sed '/aaa/s!/etc!/usr!g' file

Nota: La primera mitad del rango no se puede usar de esta manera. Estoy acostumbrado a usar símbolos @.

Otros

Expresión regular

Como puede ver, las expresiones regulares están en todas partes en la línea de comando. A continuación, solo una breve explicación.

^  De línea de
$  final de la línea
.  Caracteres individuales
*  cero o más coincidencias
+  1 o más coincidente
?  0, o una coincidencia
{m}  para que coincida con un repetidas veces m
{m, n}  para que coincida con un repiten a m El carácter n-time
\  escape
[0-9]  coincide con cualquier carácter entre paréntesis, el rol de
o |, o
\ b  coincide con una palabra. Por ejemplo, \blucky\b solo coincide con la palabra suerte

Parámetro i

El parámetro i se introdujo brevemente anteriormente y su función es permitir que la operación se realice en el archivo original. No importa lo que haga, el archivo original se sobrescribirá. Esto es muy peligroso
Al agregar un parámetro, puede hacer una copia de seguridad del archivo original.

sed -i.bak 's/a/b/' file

El comando anterior tendrá efecto en el archivo original y generará un archivo file.bak. Se recomienda encarecidamente utilizar el parámetro i para especificar el archivo bak al mismo tiempo.

Realizar

Usamos dos comandos para observar el poder combinado de sed y otros comandos.

Líneas de salida con una longitud de no menos de 50 caracteres.

sed -n '/^.{50}/p'

Cuente cuántas veces aparece cada palabra en el archivo

sed 's/ /\n/g' file | sort | uniq -c

Encuentre el archivo py en el directorio y elimine todos los comentarios de nivel de línea

find ./ -name "*.py" | xargs sed  -i.bak '/^[ ]*#/d'

Ver líneas 5-7 y 10-13

sed -n -e '5,7p' -e '10,13p' file

Solo dirección IP de salida

ip route show | sed -n '/src/p' | sed -e 's/  */ /g' | cut -d' ' -f9

-------------------------

Publicado 25 artículos originales · elogiado 8 · 20,000+ visitas

Supongo que te gusta

Origin blog.csdn.net/boazheng/article/details/103483851
Recomendado
Clasificación