• Sed流编辑器总结


      sed 是 Unix 和 Linux 系统中的一个强大的流编辑器。它用于对文本进行基本的修改和处理。以下是关于 sed 的详细解说,包括其基本语法,常见用法和一些高级用法。

    基本语法

    sed [选项] '命令' 输入文件
    

    常见选项

    • -e:指定要执行的 sed 命令。
    • -f:指定包含 sed 命令的脚本文件。
    • -i:直接修改文件内容(小心使用)。
    • -n:取消默认输出,适合与 p 命令一起使用来控制输出。
    • -r:使用扩展正则表达式。
    • -s:将输入文件视为独立的文件,而不是一个长的流。
    常用命令

    • s: 替换
    • p: 打印
    • d: 删除
    • a: 追加文本在当前行后
    • i: 插入文本在当前行前
    • c: 替换行
    • q: 退出
    • y: 转换字符

    基本命令

     -n 可以抑制默认输出,只输出第2行:

        sed -n '2p' file.txt
    

    搜索和替换

    • 基本替换语法sed 's/原文本/新文本/' 输入文件
    echo "hello world" | sed 's/world/universe/'  # 输出:hello universe
    

    • 全局替换g
    echo "hello world world" | sed 's/world/universe/g'  # 输出:hello universe universe
    

    • 指定第几个替换:(指定第二个替换)
    echo "hello world world" | sed 's/world/universe/2'  # 输出:hello world universe
    

    • 匹配模式替换
    echo "hello world" | sed '/world/s/hello/hi/'  # 输出:hi world
    

    指定行进行替换

    • 在特定行进行替换
    sed '2s/original/replacement/' file.txt  # 替换第2行的内容
    

    • 在行号范围内替换
    sed '2,4s/original/replacement/' file.txt  # 在第2到第4行进行替换
    

    • 匹配模式进行替换
    sed '/pattern/s/original/replacement/' file.txt  # 在包含pattern的行进行替换
    

    删除行

    • 删除指定行
    1. sed '2d' file.txt # 删除第2
    2. **删除行号范围内的行**
    3. sed '2,4d' file.txt # 删除第2到第4

    • 删除匹配模式的行
    sed '/pattern/d' file.txt  # 删除包含pattern的行
    

    插入和追加文本

    • 在指定行前插入文本
    sed '2i\插入的文本' file.txt  # 在第2行前插入文本
    

    • 在指定行后追加文本
    sed '2a\追加的文本' file.txt  # 在第2行后追加文本
    

    替换整个文件

    使用 -i 选项可以直接在文件内执行替换操作

    sed -i 's/original/replacement/g' file.txt  # 直接修改文件内容,替换所有匹配项
    

    高级用法

    多点编辑

    可以通过 -e 选项进行多次编辑。

    sed -e 's/old1/new1/' -e 's/old2/new2/' file.txt
    

    使用脚本文件

    如果有一系列的 sed 命令,可以将它们放在一个脚本文件中,然后使用 -f 选项执行。

    1. # commands.sed
    2. s/original/replace1/
    3. s/old/replace2/
    4. # 使用命令执行
    5. sed -f commands.sed file.txt

    替换时使用正则表达式
    echo "abc123def" | sed -r 's/[0-9]+/[digits]/'  # 输出:abc[digits]def
    

    保留备份文件

    在使用 -i 选项时,可以通过添加扩展名来保存备份。

    sed -i.bak 's/original/replacement/' file.txt  # 修改文件内容并保留备份 file.txt.bak
    

    只打印匹配的行

    结合 -n 选项和 p 命令,只打印与特定模式匹配的行。

    sed -n '/pattern/p' file.txt
    

    处理多行文本
    1. # 交换每两行的内容
    2. sed 'N;s/\(.*\)\n\(.*\)/\2\n\1/' file.txt # 将每两行交换位置

    复杂替换示例
    1. # 假设file.txt 内容如下:
    2. # alpha beta
    3. # gamma delta
    4. sed 's/\([aeiou]\)/<\1>/g' file.txt # 将所有元音替换为<元音>
    5. # alpha beta => <a>lph<a> b<e>t<a>
    6. # gamma delta => g<a>mm<a> d<e>lt<a>

    总结

    命令/选项含义示例
    -n取消默认输出sed -n 'p' file.txt
    -e script允许多行脚本sed -e 's/foo/bar/' -e 's/baz/qux/' file.txt
    -i[SUFFIX]直接编辑文件,备份可选sed -i 's/foo/bar/g' file.txt
    -r使用扩展正则表达式sed -r 's/[0-9]+/NUMBER/' file.txt
    s/old/new/g替换文本sed 's/foo/bar/g' file.txt
    p打印行sed -n '2p' file.txt
    d删除行sed '3d' file.txt
    a\text在当前行后追加文本sed '3a\Hello World' file.txt
    i\text在当前行前插入文本sed '3i\Hello World' file.txt
    c\text替换行sed '3c\Hello World' file.txt
    {}指定区间的操作sed '2,4{s/foo/bar/g}' file.txt
    y/abc/ABC/转换字符sed 'y/abc/ABC/' file.txt
    q退出sed '5q' file.txt
  • 相关阅读:
    new Promise(function(resolve, reject){}) 的reject相当于抛异常
    股票分析中的 KDJ指标
    【开源项目】Branchless UTF-8 Decoder 无分支的 UTF-8 解码器
    RK3588 开启HDCP
    基于SSM的学生信息管理系统
    【逐步剖C++】-第二章-C++类和对象(中)
    记录一个删库跑路的技巧(如何快速删除数据库下面的所有表)
    【MacOS】常用快捷键
    leetCode 11. 盛最多水的容器 + 双指针
    Android逆向技术高阶大法
  • 原文地址:https://blog.csdn.net/Lzcsfg/article/details/139437974