sed的在脚本中的实践案例

简介: sed的在脚本中的实践案例

sed 在 shell 脚本中的实践案例非常丰富,下面是一些典型应用:

替换操作

  1. 替换文件中特定的文本

    # 将 test.txt 文件中所有的 "old" 替换为 "new"
    sed -i 's/old/new/g' test.txt
    

    -i 参数表示直接编辑原文件。如果不使用 -i,则只会显示替换后的结果,而不修改原文件。

  2. 仅替换每一行的第一个匹配项

    # 只替换每一行第一个出现的 "foo"
    sed '0,/$/s/foo/bar/' file.txt
    

删除操作

  1. 删除包含指定模式的行

    # 删除包含 "error" 的行
    sed '/error/d' log.txt
    
  2. 删除指定行范围

    # 删除第 5 到第 10 行
    sed '5,10d' input.txt
    

插入与追加

  1. 在每一行后追加文本

    # 在每一行末尾添加字符串 ".txt"
    sed 's/$/.txt/' names > new_names.txt
    
  2. 在特定行之前或之后插入文本

    # 在匹配 "start-marker" 的行之后插入一行内容
    sed '/start-marker/a\New line content\n' file.txt
    
    # 或者,在所有行之后追加新的内容
    sed -i '$a\Additional line' file.txt
    

打印特定行

  1. 打印匹配正则表达式的行

    # 打印包含 "root" 的行
    sed -n '/root/p' /etc/passwd
    
  2. 打印指定行号范围

    # 打印文件的第 3 至第 5 行
    sed -n '3,5p' file.txt
    

多行处理

  1. 处理多行模式(如括号匹配)
    # 使用扩展正则表达式(-E)匹配以 `begin` 开始并以 `end` 结束的多行块,并对其进行替换
    sed -E '/begin/{:a;N;/end/!ba;s/(begin.*end)/replacement/}' multi_line_file.txt
    

格式转换和提取信息

  1. 提取日志中的IP地址
    # 假设日志格式为:access from [192.168.1.1]
    sed 's/.*from \[\([^]]*\)\].*/\1/p' access_log.txt
    

以上都是 sed 在实际脚本编写中的常见应用场景,实际上它还可以进行更复杂的文本处理,包括根据条件分支执行不同的命令等。

目录
相关文章
|
Perl Linux 机器学习/深度学习
|
应用服务中间件 Shell nginx
|
Unix Shell Perl
|
Perl Shell
下一篇
无影云桌面