Linux基础——sed工具

sed工具概述:

  • 文本处理工具,读取文本内容,根据指定条件进行处理。

  • 可在无交互的清空下实现相当复杂的文本处理操作

  • 被广泛应用于Shell脚本,以完成自动化处理任务

  • sed依赖于正则表达式

  • 工作原理:读取===>执行===>显示

一、sed命令格式

        1.sed命令格式

sed -e '编辑指令'文件1 文件2
sed -f -e '编辑指令'文件1 文件2
sed -i -e '编辑指令'文件1 文件2

        2.常用选项

        -e 指定要执行的命令,只有一个编辑命令时可省略
        -h 显示帮助
        -n 仅显示script处理后的结果

        3.执行多条命令格式

        方式一:

sed -e '操作1' -e '操作2' 文件

        方式二:

sed -e '操作1;操作2' 文件

        方式三:

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

        4.sed命令的操作符

s:替换,替换指定字符
d:删除,删除选定的行
a:增加,在当前行下面增加一行指定内容
i:插入,在选定行上面插入一行指定内容
c:替换,将选定行替换为指定内容
y:字符转换,转换前后的字符长度必须相同
=:打印行号
n: 跳过下一行执行
p:打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;
   如果有非打印字符,则码输出。其通常与"-n"选项一起使用。
r:一般和高级正则表达式

        (1)打印(查询)操作

                (i)打印指定行内容

sed -n '#p' test.sh   打印test.sh文件中第#行内容
sed -n '$p' test.sh   打印test.sh文件中最后一行内容

                (ii) 指定区间内容

sed -n '2,6p' test.sh    打印2-6行内容
sed -n '6,$p' test.sh    打印第六行到最后一行内容
sed -n '6,+6p' test.sh    打印第六行以及后面6行内容

                 (iii) 指定间隔打印

sed -n -e '2p' -e '$p' test.sh 打印第二行和最后一行

                (iv)对奇数行和偶数行的打印

sed -n 'n;p' test1.txt    打印偶数的行
sed -n 'p;n' test1.txt    打印奇数的行

        这里的n就是指高级模式的意思,n在p前面,跳过一行,打印下一行,就是偶数行;在后面,就是打印第一行,跳过第二行,即打印奇数行 。

                (v)文本模式过滤内容

        方式一:对包含的字符串进行过滤打印

sed -n '/o/p' test.txt     包含o的所有行
sed -n '/th/p' test.txt    包含th的所有行

        方式二: 应用基础正则表达式进行打印

sed -n '/^root/p'/etc/passwd     以root为开头的所有内容,全文本搜索
sed -n ' /bash$/p'/etc/passwd    以bash结尾的所有内容,全文本搜索
sed -n '4,/bash$/p' /etc/passwd  从第四行开始,一直打印到第一个以bash为结尾的所在行

        (2)删除操作

        sed -i 时会对文本进行实际操作(建议对目标文件先进行备份,再进行操作)

sed -n '3d;p' test1.txt    删除第三行,打印剩余的所有内容
sed -n '5,8d;p' test1.txt  删除5到8行,打印剩余的所有内容
sed -n '5,$d;p' test1.txt  删除5到最后一行行,打印剩余的所有内容
sed '4,6!d' test1.txt      除了4-6行,其他的全部删除

        (3)匹配字符串删除(查询)操作

sed '/one/d' test1.txt           删除包含one的行
sed '/one/,/six/d' test1.txt     删除包含one行到six行
sed '/one/,/six/! d' test1.txt   除了one-six的行,其余的全部删除,反向删除
sed '/six/ !d' test1.txt         除了six行,其余的全部删除,反向删除
sed '/^$/d' test1.txt            通过^$,来删除空行;

        补充:删除空行的三种方法:

grep -v "^$" test1.txt        过滤出非空行
cat test1.txt ltr -s "\n"     压缩换行符
sed '/^$/d' test1.txt         删除空行

        (4)替换(修改)操作

               格式:

行范围 s/旧字符串/新字符串/替换标记

              替换标记:

                        数字:表示新字符串替换第几出匹配的地方
                        q:表示新字符串会替换所有匹配的地方
                        p:打印与替换命令匹配的行,与-n一起使用
                        w文件:将替换的结果写入文件中

               替换中的指令:

                        s:替换字符串
                        c:整行替换
                        y:字符替换,针对一个字符串进行替换,替换前后字符串要相同。
                注意:-y 针对单个字符进行替换,比如用123替换aaa,替换结果是aaa被替换为111。

                实例:

sed -n 's/root/test/2p' /etc/passwd    将passwd文件中的第二个root替换为test
sed -n 's/root/test/gp' /etc/passwd    将passwd文件中的root全部替换为test
sed -n 's/^root/ s/^/#/p' /etc/passwd  以root开头的行,前面加上#,即注释掉
sed '/echo/c ok' test.sh               将含echo的行,替换为ok
sed '/b=2/a insert' test.sh            在含b=2的行前插入内容为insert的一行
sed '$r test2.sh' test.sh              在test2文件内插入test文件内容
sed 'y/echo/ookk/' test.sh             把echo字符串替换为ookk字符串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值