Editor sed de Linux

Uno, editor sed

  • 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 flujo de trabajo de sed incluye principalmente tres procesos de lectura, ejecución y visualización:

  • 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)
  • Ejecución : 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á secuencialmente en todas las líneas.
  • Pantalla : 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.

Antes de que se procese todo el contenido del archivo, el proceso anterior se repetirá
hasta que se procese todo el contenido.

Nota : De forma predeterminada, todos los comandos sed se ejecutan en el espacio del patrón, por lo que el archivo de entrada no cambiará de ninguna manera, a menos que se utilice la redirección para almacenar la salida.

1. 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

2. Opciones comunes

-e或--expression=: 表示用指定命令来处理输入的文本文件,只有一个操作命令时可省略,一 般在执行多个操作命令使用

f或--file=: 表示用指定的脚本文件来处理输入的文本文件。

h或--help: 显示帮助。

-n、--quiet或silent:禁止sed编辑器输出,但可以与p命令一起使用完成输出。

-i: 直接修改目标文本文件。

3. Operaciones comunes


s:替换,替换指定字符。
d:删除,删除选定的行。
a:增加,在当前行下面增加一行指定内容。
i:插入,在选定行上面插入一行指定内容。
c:替换,将选定行替换为指定内容。
y:字符转换,转换前后的字符长度必须相同。
p:打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以 ASCII 码输出。其通常与“-n”选项一起使用。
=:打印行号。
l(小写L):打印数据流中的文本和不可打印的ASCII字符(比如结束符$、制表符\t)

2. Demostración del uso del editor sed

1. Imprimir contenido

sed -n 'p' 55.txt   打印文件内容

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

sed -n '=' 55.txt  打印行号

Inserte la descripción de la imagen aquí

sed -n 'l' 55.txt  打印文件中不可打印的ASCIII字符(比如结束符$、制表符\t)

Inserte la descripción de la imagen aquí

sed -n '=;p' sed.txt
sed -n -e '=' -e 'p' sed.txt 

Inserte la descripción de la imagen aquí

2. Utilice la dirección

El editor sed tiene 2 modos de direccionamiento:

  • 1. Represente el intervalo de filas en forma digital.
  • 2. Usa el modo de texto para filtrar viajes
打印第一行
sed -n '1p' 55.txt  

Inserte la descripción de la imagen aquí

打印最后一行
sed -n '$p' 55.txt

Inserte la descripción de la imagen aquí

打印13行
sed -n '1,3p' 55.txt

Inserte la descripción de la imagen aquí

打印第3行到最后一行
sed -n '3,$p' 55.txt

Inserte la descripción de la imagen aquí

打印第1行之后的连续3行,即1-4行
sed -n '1,+3p' 55.txt

Inserte la descripción de la imagen aquí

输出前5行信息后退出,q表示退出
sed '5q' 55.txt

Inserte la descripción de la imagen aquí

打印奇数行
sed -n 'p;n' 55.txt

Inserte la descripción de la imagen aquí

打印偶数行
sed -n 'n;p' 55.txt

Inserte la descripción de la imagen aquí

从第2行开始执行n和p的操作,也是奇数行
sed -n '2,${n;p}' 55.txt

Inserte la descripción de la imagen aquí

/etc/passwd文件中过滤出含有User的行,并打印出来 区分大小写
sed -n '/User/p' /etc/passwd

Inserte la descripción de la imagen aquí

/etc/passwd文件中打印以‘a’开头的行
sed -n '/^a/p' /etc/passwd

Inserte la descripción de la imagen aquí

/etc/passwd文件中打印以‘bash’结尾的行
sed -n '/bash$'/p  /etc/passwd

Inserte la descripción de la imagen aquí

打印文件里包含ftp或root的行
sed -n '/ftp\|root/p' /etc/passwd

Inserte la descripción de la imagen aquí

从第二行开始打印到包含nobody的行
sed -n '2,/nobody/p' /etc/passwd

Inserte la descripción de la imagen aquí

从第二行开始打印到包含nobody的行的行号
sed -n '2,/nobody/=' /etc/passwd

Inserte la descripción de la imagen aquí

-r表示支持正则表达式
sed -nr '/ro{1,}t/p' /etc/passwd

Inserte la descripción de la imagen aquí

3. Eliminar la fila

全删
sed 'd' 55.txt

Inserte la descripción de la imagen aquí

删除第三行
sed '3d' 55.txt

Inserte la descripción de la imagen aquí

删除24行
sed '2,4d' 55.txt

Inserte la descripción de la imagen aquí

删除最后一行
sed '$d' 55.txt

Inserte la descripción de la imagen aquí

删除空行
sed '/^$/d' 55.txt

Inserte la descripción de la imagen aquí

sed '/nologin$/d' /etc/passwd      #删除包含nologin字符的行

Inserte la descripción de la imagen aquí

sed '/nologin$/!d' /etc/passwd     #不删除包含nologin的行

Inserte la descripción de la imagen aquí

从第一个位置打开行删除功能,到第二个位置关闭行删除功能
sed '/2/,/3/d' 66.txt

Inserte la descripción de la imagen aquí

4. Reemplazar

4种替换标记:
数字:表明新字符串将替换第几处匹配的地方
g:表明新字符串将会替换所有匹配的地方
p:打印与替换命令匹配的行,与-n一起使用
w 文件:将替换的结果写到文件中
将每行的第一个root替换成admin
sed -n 's/root/admin/p' /etc/passwd

Inserte la descripción de la imagen aquí

将每行的第二个root替换成admin
sed -n 's/root/admin/2p' /etc/passwd

Inserte la descripción de la imagen aquí

将每行的所有root替换成admin
sed -n 's/root/admin/gp' /etc/passwd

Inserte la descripción de la imagen aquí

将每行的所有root删除
sed 's/root//g' /etc/passwd

Inserte la descripción de la imagen aquí

1-20行行首添加#号
sed '1,20 s/^/#/' /etc/passwd

Inserte la descripción de la imagen aquí

在以root开头的行的结尾添加#号
sed '/^root/ s/$/#/' /etc/passwd

Inserte la descripción de la imagen aquí

/etc/passwd中的1-20行输出保存到out.txt文件中
sed -n '1,20w out.txt' /etc/passwd
将/etc/passwd 中的1-20行的开头添加#后保存到out2.txt文件中
sed -n '1,20 s/^/#/w out2.txt' /etc/passwd

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

/bin/bash替换成/sbin/nologin
sed -n 's/\/bin\/bash/\/sbin\/nologin/p' /etc/passwd #“\”是转义字符,用来取消“/”的特殊意义
sed -n 's#/bin/bash#/sbin/nologin#p' /etc/passwd		#使用“!”或“#”作为字符串分隔符

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

5. Insertar

sed '/45/c ABC' 1.txt  #将含有45的行,替换为ABC

Inserte la descripción de la imagen aquí

45换为AB,注意使用“y”时需要转换前后的字符长度必须相同
sed '/45/ y/45/AB/' 1.txt

Inserte la descripción de la imagen aquí

#在1-3行,每行的下面都插入ABC
sed '1,3a ABC' 1.txt

Inserte la descripción de la imagen aquí

在第一行的上面插入ABC
sed '1i ABC' sed.txt

Inserte la descripción de la imagen aquí

#在第五行后导入该文件内容
sed '5r /root/55.txt' 1.txt

Inserte la descripción de la imagen aquí

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

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

12行复制到34行的下面,注意第三行和第四行都会复制12两行的内容
sed '1,2H;3,4G' 1.txt

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/IHBOS/article/details/114793864
Recomendado
Clasificación