sed语句的基本命令及用法

sed语句的基本命令及用法

一、在 sed命令中,常用的选项包括:

​ -e:允许多个编辑命令,多个编辑命令之间使用分号 ;`分隔。
​ -n:禁止自动打印模式空间的内容,只有经过 p 命令显式打印的内容才会输出。
​ -i:直接在源文件上进行修改,而不是将结果输出到标准输出。需要注意的是,-i 选项会直接修改源文件,慎用。
​ -r:或 --regexp-extended:启用扩展的正则表达式语法,可以使用更多的元字符和特殊字符。
​ -f:从指定的文件中读取编辑命令,而不是在命令行中指定。
​ -s:或 --separate:将输入的多个文件视为独立的文件,分别处理,而不是将它们合并为一个流进行处理。

二、命令及用法

1.替换

命令s:替换掉匹配的内容,通常可以搭配正则表达式

[root@controller ~]# cat bb 
hello world mhy
[root@controller ~]# 
[root@controller ~]# sed -ri 's/mhy/op/' bb         
[root@controller ~]# 
[root@controller ~]# cat bb 
hello world op
[root@controller ~]# 

文本中的mhy已经成功替换成了op

命令s配合字符&使用

[root@controller ~]# sed -ri 's/op/& mhy/' bb           
[root@controller ~]# 
[root@controller ~]# cat bb
hello world op mhy
[root@controller ~]# 

&字符替换的是op那一行的内容,并不是hello world op中的某一个内容.

2.删除

命令d:用于删除匹配到的文本行。

[root@controller ~]# cat aa
11111111
22222222
33333333
[root@controller ~]# 
[root@controller ~]# sed '1d' aa
22222222
33333333
[root@controller ~]# 

执行后的效果显示删除了第一行,其实并没有删除因为sed后面没有带上-i

删除匹配到的那一行

[root@controller ~]# cat aa
11111111
22222222
33333333
[root@controller ~]# 
[root@controller ~]# sed -ri '/^2/d' aa
[root@controller ~]# 
[root@controller ~]# cat aa
11111111
33333333
[root@controller ~]# 

sed后面带上-i后,匹配到以2开头的那一行已经删除,可以先用-r查看一下执行效果再确认是否删除。

3.追加

命令a:向匹配行后面插入内容,会在匹配行的下一行输出

[root@controller ~]# cat aa
11111111
33333333
44444444
55555555
[root@controller ~]# 
[root@controller ~]# 
[root@controller ~]# sed -ri '1ahello world' aa
[root@controller ~]# cat aa
11111111
hello world
33333333
44444444
55555555
[root@controller ~]# 

在第一行的下面一行已经将hello world追加成功,也可以在里面追加空格但需要在空格前面加上 \ 进行转义,否则无法追加。

4.插入

命令i:向匹配行前插入内容,会在匹配行的上一行输出

[root@controller ~]# sed -ri '/^4/i\     hello world' aa
[root@controller ~]# 
[root@controller ~]# cat aa
11111111
hello world
33333333
     hello world
44444444
55555555
[root@controller ~]# 

匹配到4开头的那一行的前面一行已经成功加入了空格和内容,与命令a的用法相似。

5.更改

命令c:更改匹配行的内容

[root@controller ~]# cat aa
11111111
hello world
33333333
     hello world
44444444
55555555
[root@controller ~]# 
[root@controller ~]# sed -ri '4chello' aa
[root@controller ~]# 
[root@controller ~]# cat aa
11111111
hello world
33333333
hello
44444444
55555555
[root@controller ~]# 

第二个hello world那一行已经更改成hello,并且前面的空格也一并更改了。

6.转换

命令y:命令会将文本中匹配到的字符按照对应的位置进行替换

[root@controller ~]# cat bb
hello world op mhy
[root@controller ~]# 
[root@controller ~]# sed -ri 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' bb
[root@controller ~]# 
[root@controller ~]# cat bb
HELLO WORLD OP MHY
[root@controller ~]# 

文本中的小写字母全部转换成大写字母,也可以将单个字母的大小写进行转换.

7.打印

命令p:打印出匹配的内容,通常与-n选项和用

[root@controller ~]# cat aa
11111111
hello world
33333333
hello
44444444
55555555
[root@controller ~]# 
[root@controller ~]# sed -n '/hello/p' aa
hello world
hello
[root@controller ~]# 

由于使用了-n只将匹配到的内容打印了出来,没有使用默认的打印功能。

8.打印行号

命令=:打印出文本中每一行的行号

[root@controller ~]# sed '=' aa
1
11111111
2
hello world
3
33333333
4
hello
5
44444444
6
55555555
[root@controller ~]# 

同样可以将匹配到的行的行数打印出来

[root@controller ~]# sed '/^hello/=' aa
11111111
2
hello world
33333333
4
hello
44444444
55555555
[root@controller ~]# 
9.下一步

命令n:表示下一行,可以搭配命令d使用将匹配到的空行删除

[root@controller ~]# cat aa
11111111
hello world

33333333
[root@controller ~]# 
[root@controller ~]# sed -ri world/{n;/^$/d}' aa 
[root@controller ~]# cat aa
11111111
hello world
33333333
[root@controller ~]# 
10.退出

命令q:用于在处理文本时,遇到指定条件后退出程序

[root@controller ~]# cat aa
11111111
hello world
33333333
hello
44444444
55555555
[root@controller ~]# 
[root@controller ~]# sed '2q' aa
11111111
hello world
[root@controller ~]# 

打印2行退出,也可以打印多行退出。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
以下是 Shell 脚本中常用的命令以及使用方法: 1. echo:输出文本或变量值 用法:echo [选项] [字符串] 常用选项: -n:不换行输出 -e:启用转义字符 示例: ``` echo "Hello, world!" # 输出 Hello, world! echo -n "Hello, " # 输出 Hello, 不换行 echo "world!" # 输出 world!,与上一行连在一起 echo -e "1\t2\t3\n4\t5\t6" # 输出带有制表符和换行符的字符串 ``` 2. read:接收用户输入 用法:read [选项] [变量名] 常用选项: -p:提示用户输入时显示的字符串 示例: ``` read -p "请输入你的名字:" name echo "你好,$name!" ``` 3. if:条件语句 用法: ``` if [ 条件 ]; then # 条件成立时执行的语句 else # 条件不成立时执行的语句 fi ``` 示例: ``` if [ $1 -gt 0 ]; then echo "$1 是正整数" elif [ $1 -eq 0 ]; then echo "$1 是零" else echo "$1 是负整数" fi ``` 4. for:循环语句 用法: ``` for 变量 in 列表; do # 循环体 done ``` 示例: ``` for i in {1..10}; do echo $i done for file in *.txt; do echo $file done ``` 5. while:循环语句 用法: ``` while [ 条件 ]; do # 循环体 done ``` 示例: ``` i=1 while [ $i -le 10 ]; do echo $i i=$((i+1)) done ``` 6. case:多分支语句 用法: ``` case 变量 in 模式1) # 模式1 成立时执行的语句 ;; 模式2) # 模式2 成立时执行的语句 ;; *) # 所有模式都不成立时执行的语句 ;; esac ``` 示例: ``` case $1 in start) echo "启动服务" ;; stop) echo "停止服务" ;; restart) echo "重启服务" ;; *) echo "用法:$0 start|stop|restart" ;; esac ``` 7. test:测试文件或字符串是否存在,以及比较数值 用法: ``` test [选项] 参数 [选项] 参数 ``` 常用选项: -e:测试文件是否存在 -f:测试文件是否为普通文件 -d:测试文件是否为目录 -z:测试字符串是否为空 -n:测试字符串是否非空 -eq:测试数值是否相等 -lt:测试数值是否小于 -gt:测试数值是否大于 示例: ``` if test -e file.txt; then echo "file.txt 存在" fi if [ -f file.txt ]; then echo "file.txt 是普通文件" fi if [ -d dir ]; then echo "dir 是目录" fi if [ -z "$str" ]; then echo "str 是空字符串" fi if [ $num -gt 0 ]; then echo "num 是正数" fi ``` 8. grep:文本搜索工具 用法:grep [选项] 模式 [文件] 常用选项: -i:忽略大小写 -v:反向搜索,输出不匹配的行 -n:显示匹配行的行号 示例: ``` grep "hello" file.txt # 在 file.txt 中搜索 hello grep -i "hello" file.txt # 在 file.txt 中忽略大小写地搜索 hello grep -n "hello" file.txt # 在 file.txt 中搜索 hello 并显示匹配行的行号 grep -v "hello" file.txt # 在 file.txt 中反向搜索,输出不匹配的行 ``` 9. sed:流编辑器,用于文本替换 用法sed [选项] '命令' 文件 常用命令: s/模式/替换/:替换指定模式为指定替换内容 示例: ``` sed 's/hello/hi/g' file.txt # 将 file.txt 中所有 hello 替换为 hi ``` 10. awk:文本处理工具,可进行简单数据分析和处理 用法:awk [选项] '模式 { 命令 }' [文件] 常用命令: print:输出指定内容 示例: ``` awk '{ print $1 }' file.txt # 输出 file.txt 中每行的第一个单词 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这linux不学也罢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值