sed
El 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 vim
comparte 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 --quiet
o --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 y2,5
es 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 p
imprimir. 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-n
parámetros, piense por qué.
w Escriba el contenido correspondiente en otro lugar.
a
, i
, c
Y 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 sed
un 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 -n
pará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 Pattern
significado, 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-n
se utiliza el parámetro,p
solo 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
-------------------------