linux - sed常用命令
2021-05-26 本文已影响0人
小小白的jotter
linux - sed常用命令
使用语法
使用规则
sed 参数 命令 input_file
常用参数:
参数 | 作用 |
---|---|
-n | 取消默认 sed 输出,仅输出符合条件的行;常与sed 内置命令 p 一起使用 |
-i | 直接把修改结果写入文件;不用 -i,sed 修改的是内存数据 |
-e | 多次编辑不需要管道符 |
-r | 支持扩展正则表达式 |
常用命令:
命令 | 作用 |
---|---|
a | 对文本追加,在指定行后面添加一行;多行时除最后一行外,每行末尾需用 “\n” 续行 |
c | 用新文本修改(替换)当前行中的文本;多行时除最后一行外,每行末尾需用 “\n” 续行 |
i | 表示插入文本,在指定行前添加一行或多行文本;多行时除最后一行外,每行末尾需用 “\n” 续行 |
d | 删除匹配的行 |
p | 打印匹配行的内容 |
s/正则/替换内容/g | 匹配正则内容,然后替换内容,结尾 g 表示全局匹配 |
sed的正则表达式元字符
元字符 | 作用 |
---|---|
\(..\) | 保存已匹配的字符 |
& | 保存查找串以便在替换串中引用 |
\< | 词首定位符,/<love/:匹配包含以 love 开头的单词的行 |
\> | 词尾定位符, /love>/:匹配包含以 love 结尾的单词的行 |
x\{m\} | 连续 m 个 x |
x\{m,\} | 至少 m 个 x |
x\{m,n\} | 至少 m 个 x,但不超过 n 个 x |
实例
准备文件

打印:p 命令
打印第二行和第三行。不加 -n 的情况下,sed 会打印全文并把符合条件的行打印两遍,加上 -n 只会打印符合条件的内容
sed '2,3p' 1.txt
sed -n '2,3p' 1.txt

打印以 This 开头的行
sed -n '/^This/p' 1.txt

打印含有以 Th 为单词词首的行
sed -n '/\<Th/p' 1.txt

打印含有以 day 为单词词尾的行
sed -n '/day\>/p' 1.txt

打印以 Th 开头,ne 结尾的行
sed -n '/Th.*ne$/p' 1.txt

打印前四行并且打印行号;= 表示打印行号,用到不同编辑命令时,用 {} ,且不同编辑命令之间用分号分割
sed -n '1,4{=;p}' 1.txt

打印除前四行以外的其他行,不知道一共有多少行,可以用 !反选
sed -n '1,4!p' 1.txt

打印第一行到匹配到 third 的行
sed -n '1,/third/p' 1.txt

打印匹配到 second 的行到匹配到 third 的行
sed -n '/second/,/third/p' 1.txt

插入:a 命令和 i 命令
a 命令和 i 命令的使用方法相同,不同的是 a 命令是在行之后添加内容,i 命令是在行之前插入内容。
在第一行之后/之前添加 add one
sed '1a add one' 1.txt
sed '1i add one' 1.txt

在第二行到第三行之后/之前添加 add one
sed '2,3a add one' 1.txt
sed '2,3i add one' 1.txt

匹配到 second 的行到匹配到 third 的行之后/之前添加 add one
sed '/second/,/third/a add one' 1.txt
sed '/second/,/third/i add one' 1.txt

在第一行之后/之前添加 add one,add two 两行,用 \n 分隔开
sed '1a add one\nadd two' 1.txt
sed '1i add one\nadd two' 1.txt

在第一行之前加 start,在最后一行之后加 end,对单个文件进行多个操作可以用 -e
sed -e '1i start' -e '$a end' 1.txt

删除:d 命令
删除第一行
sed '1d' 1.txt

删除二到三行
sed '2,3d' 1.txt

删除匹配到 last 的行
sed '/last/d' 1.txt

替换行:c 命令
将第一行替换为第一行
sed '1c 第一行' 1.txt

将匹配到 Monday 的行替换为星期一
sed '/Monday/c 星期一' 1.txt

替换字符串:s 命令
使用方法:s/正则/替换内容/,常与 g 连用表示全局替换
将全文的 line 替换为 text,不加 g 只替换每一行的第一个 line
sed 's/line/text/g' 1.txt
sed 's/line/text/' 1.txt

s 命令也可以与 p 和 -n 连用,只打印匹配到的行
sed -n 's/day/DAY/p' 1.txt

将 is 加上双引号,也就是用 “is” 替换 is。可以用 & 号,当它用在替换字符串中的时候,代表的是原始的查找匹配数据。
sed 's/is/"&"/g' 1.txt
