linux指令--sed

sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。

语法解析

sed  [选项]   编辑命令   文件

选项:

  • -n:只显示匹配处理的行
  • -e:执行多个编辑命令时
  • -i:在原文件中进行修改,不输出到屏幕
  • -r:支持扩展正则表达式
  • -f:从脚本文件中读取内容并执行

编辑命令:

  • p:打印匹配行(print)
  • d:删除指定行 (delete)
  • a:在匹配行后面追加 (append)
  • i:在匹配行前面插入 (insert)
  • c:整行替换
  • r:将文件的内容读入 (read)
  • w:将文本写入文件 (write)
  • s:字符串替换(匹配正则表达式)(substitution)
  • =:输出行号

使用示例

先创建文件test.txt,并写入如下内容:

HELLO LINUX!  
Linux is a free unix-type opterating system.  
This is a linux testfile!  
Linux test 
Google
Taobao
Runoob
Tesetfile
Wiki

p命令的使用

通常与-n选项结合使用

输出行内容:

sed -n '1p' test.txt  // 输出第一行内容
sed -n '1,5p' test.txt  // 输出1~5行内容
sed -n '$p' test.txt  // 输出最后一行内容
sed -n '1p;2p;5p' test.txt  // 输出第1、2、5行内容

模式匹配输出行:

sed -n '/模式/p' 文件

sed -n '/is/p' test.txt  // 打印存在 is 内容的行

d命令的使用

删除指定行:

sed '3d' test.txt  // 删除第三行内容

a命令的使用

与-i选项结合使用,在原内容的基础上进行修改

sed -i '1a linux-next' test.txt  // 在第一行后添加了‘linux-next’内容

sed -i '/is/a is-next' test.txt  // 在含有 is 内容的行后添加‘is-next’内容

i命令的使用

与a命令使用类似,只不过是在指定行前插入。

sed -i '1i linux-next' test.txt  // 在第一行前插入
sed -i '/is/i is-next' test.txt  // 在含有 is 内容的行前添加‘is-next’内容

c命令的使用

对整行进行修改

sed '1c hello linux' test.txt  // 对第一行内容进行修改 内容改为‘hello linux’
// 因为没有带任何选项,所以默认打印操作后的所有行内容,不会在原内容上修改

sed '/is/c hello linux' test.txt  // 将含有 is 内容的行修改为hello linux

r命令的使用

将指定文件读入到文件中,操作执行在指定行的后面

新建一个临时文件tmp:

I am new content

将tmp文件的内容读入到test.txt文件中

sed '1r tmp' test.txt  // 对test.txt文件的第一行读入tmp文件

模式匹配读入

sed '/is/r tmp' test.txt  // 将tmp文件内容读入到test.txt文件中含义is的行之后

s命令的使用--文本替换

sed -i '[address]s/pattern/replacement/flags' filename
// -i 加上选项时在原文上修改,不加则不会修改原文内容
// pattern 查找内容
// replacement替换内容

address用法如下:

address 数字,表示第几行。如3指第三行

address,address1 数字,表示从第几行到第几行。如3,5 从第三行到第五行

$ 表示最后一行。如2,$ 从第二行到最后一行

flags 标记功能

n 1~512 之间的数字,表示指定要替换的字符串在一行中出现第几次时才进行替换,例如,一行中有 3 个 A,但用户只想替换第二个 A,这是就用到这个标记;

g 全局替换。对数据中所有匹配到的内容进行替换,如果没有 g,则只会在第一次匹配成功时做替换操作。例如,一行数据中有 3 个 A,则只会替换第一个 A;

p 会打印与替换命令中指定的模式匹配的行。此标记通常与 -n 选项一起使用。

w file 将缓冲区中的内容写到指定的 file 文件中;

& 用正则表达式匹配的内容进行替换;

\n 匹配第 n 个子串,该子串之前在 pattern 中用 指定。

\ 转义(转义替换部分包含:&、\ 等)。

用法案例:

lixd@VM-16-13-ubuntu:~/practice$ cat test.txt

LINUX!

Linux is a free unix-type opterating system.

This is a linux testfile!

Linux test

Google

Taobao

Runoob

Tesetfile

Wiki

下面的操作不加 -i 选项,不会在原文内容上修改:

// 将全局的LINUX替换为MySQL
sed 's/LINUX/MySQL/g' test.txt

// 将每行第二次出现的a字符替换为#
sed 's/a/#/2g' test.txt

// 将第1到第三行头部添加#
sed '1,3 s/^/#/g' test.txt
// 将第一到第三行末尾添加?
sed '1,3 s/$/?/g' test.txt

  • 25
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值