Linux - explicación detallada de sed de procesamiento de archivos tres espadachines - casos múltiples


editor sed

Visión general

  • Sed es un editor de flujo, el editor de flujo editará el flujo de datos según un conjunto de reglas proporcionadas de antemano antes de que el editor procese los datos.
  • El editor sed puede procesar los datos en el flujo de datos de acuerdo con los comandos, que se ingresan desde la línea de comandos o se almacenan en un archivo de texto de comandos.
  • El proceso de trabajo del editor de flujo se puede entender como: se ejecuta secuencialmente de arriba a abajo, al igual que la tubería, se ejecuta línea por línea

Proceso de trabajo

Incluye principalmente los siguientes tres procesos

Leer

  • Sed lee una línea de contenido del flujo de entrada (archivo, tubería, entrada estándar) y la almacena en un búfer temporal (también conocido como espacio de patrón)

llevado a cabo

  • De forma predeterminada, todos los comandos sed se ejecutan secuencialmente en el espacio del patrón
  • A menos que se especifique la dirección de la línea, el comando sed se ejecutará en secuencia en todas las líneas

monitor

  • Envíe el contenido modificado al flujo de salida
  • Después de enviar los datos, el espacio del patrón se vaciará
  • Antes de que se procese todo el contenido del archivo, el proceso anterior se repetirá hasta que se procese todo el contenido.

Formato de comando

#例:
sed -e '操作' 文件1 文件2 ...
sed -n -e '操作' 文件1 文件2 ...
sed -f 脚本文件 文件1 文件2 ...
sed -i -e '操作' 文件1 文件2 ...


sed -e 'n{
操作1    
操作2
...
}' 文件1 文件2 ...

Opciones comunes

Opciones Explicación
-e o - expresión Indica que el comando especificado se usa para procesar el archivo de texto de entrada. Cuando solo hay un comando de operación, se puede omitir. Generalmente, se usa cuando se ejecutan múltiples comandos de operación
-fo --archivo Indica que el archivo de script especificado se utiliza para procesar el archivo de texto de entrada.
-ho --help Mostrar ayuda
-n, - silencioso o silencioso La salida del editor Sed está prohibida, pero se puede usar con el comando p para completar la salida.
-yo Modifique el archivo de texto de destino directamente

Operaciones comunes

Opciones Explicación
s Reemplazar: reemplaza el carácter especificado
re Eliminar: elimina la fila seleccionada
un Aumentar: agrega una línea de contenido especificado debajo de la línea actual
yo Insertar: inserta una línea de contenido especificado en la línea seleccionada
C Reemplazar: reemplaza la línea seleccionada con el contenido especificado
y Conversión de caracteres; tenga en cuenta que la longitud de los caracteres antes y después de la conversión debe ser la misma
pags Imprimir; si especifica una línea al mismo tiempo, significa imprimir la línea especificada; si no especifica una línea, significa imprimir todo el contenido; si hay caracteres que no se imprimen, se imprimirá en ASCII; y generalmente se usa junto con la opción "-n"
= Número de línea de impresión
l Imprima el texto y los caracteres ASCII no imprimibles en el flujo de datos (como el terminador $, el carácter de tabulación \ t)

Ejemplo

Imprimir contenido

sed -ne 'p' zxc1

marca
marca

sed -n '=' zxc1

marca

sed -n 'l' zxc1

marca

sed -n '=;p' zxc1

marca

[root@localhost shell]# sed -n '
> p
> =
> ' zxc1

marca

Usar dirección

  • El editor sed tiene 2 modos de direccionamiento:
    • Representar el intervalo de filas en forma numérica
    • Usa el modo de texto para filtrar líneas
[root@localhost shell]# sed -n '1p' zxc1        ##打印第一行
one
[root@localhost shell]# sed -n '$p' zxc1        ##打印最后一行
twelve
[root@localhost shell]# sed -n '1,3p' zxc1        ##打印输出第一行至第三行的内容,可在3前面加一个+符号
one
two
three
[root@localhost shell]# sed -n '3,$p' zxc1        ##打印从第三行至最后一行的内容
three
four
five
six
seven
eight
nine
ten
eleven
twelve
[root@localhost shell]# sed 5q zxc1        ##q用法:打印前5行内容后退出
one
two
three
four
five
sed -n 'p;n' zxc1

sed -n 'n;p' zxc1

marca

sed -n '2,${n;p}' zxc1

marca

sed -n '/user/p' /etc/passwd

marca

sed -n '/^a/p' /etc/passwd

marca

sed -n '/bash$/p' /etc/passwd

sed -n '/ftp\|root/p' /etc/passwd

marca

sed -n '2,/nobody/p' /etc/passwd

sed -n '2,/nobody/=' /etc/passwd

marca

sed -n '2,/nobody/=;2,/nobody/p' /etc/passwd

marca

[root@localhost shell]# sed -nr '/ro{1,}t/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
##-r表示支持正则表达式
##匹配一次以上的o,就能匹配到root

Borrar fila

sed 'd' zxc1

sed '3d' zxc1

sed '2,4d' zxc1

marca

marca

[root@localhost shell]# sed '/^$/d' zxc1
##用作删除空行
[root@localhost shell]# sed '/nologin$/d' /etc/passwd
##删除以nologin为结尾的内容

[root@localhost shell]# sed '/nologin$/!d' /etc/passwd
##"!"表示取反操作

marca

sed -n 'p' zxc2

sed '/2/,/3/d' zxc2

marca

cat zxc2

sed '/10/,/3/d' zxc2 

marca

Marca de reemplazo

##格式:
行范围 s/旧字符串/新字符串/替换标记

4 tipos de etiquetas de reemplazo:

  • Número: indique cuál de las coincidencias reemplazará la nueva cadena
  • g: indica que la nueva cadena reemplazará todas las coincidencias
  • p: Imprime la línea que coincide con el comando reemplazar, usado con -n
  • w archivo: escribe el resultado del reemplazo en el archivo
  • Ejemplo:
sed -n 's/root/admin/p' /etc/passwd

sed -n 's/root/admin/2p' /etc/passwd

marca

sed -n 's/root/admin/gp' /etc/passwd

marca

sed -n 's/root//gp' /etc/passwd

marca

[root@localhost shell]# sed '1,20 s/^/#/' /etc/passwd

marca

sed '/^root/ s/$/#/' /etc/passwd

marca

marca

cat zxc2

sed -f zxc3 zxc2

marca

sed '1,20w, out.txt' /etc/passwd > dev/null

marca

sed '1,20w out.txt' /etc/passwd > /dev/null 

cat out.txt

marca

insertar

marca

sed '1,3a ABC' 123.txt

marca

sed '1i ABC' 123.txt

marca

sed '5r /etc/resolv.conf' 123.txt

marca

sed '/root/{H;d};$G' /etc/passwd
##包含root的行剪切到末尾,H表示复制到剪切板,G表示粘贴到指定行后

marca

Supongo que te gusta

Origin blog.csdn.net/weixin_51486343/article/details/111753171
Recomendado
Clasificación