linux sed i 大文件,Linux文本处理之Sed(流编辑器)

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

文章目录 Sed是Stream Editor(流编辑器)缩写,是操作、过滤和转换文本内容的强大工具。常用功能有增删改查,过滤,取行、修改配置文件(如 xml、json、ini、yaml )

执行流程

5dde814823828.png

语法格式Linux命令 | sed [options] 'sed-command' //格式一

sed [options] -f sed-scriptfile [input-file] //格式二【options】选项-e 或--expression=:以选项中的指定的sed-command来处理输入的文本文件;

-f 或--file=:以选项中指定的sed-scriptfile文件来处理输入的文本文件;

-h或--help:显示帮助;

-n或--quiet或——silent:仅显示script处理后的结果;

--version:显示版本信息。【sed-command】sed命令a 在当前行下面插入文本。

i 在当前行上面插入文本。

c 把选定的行改为新的文本。

d 删除,删除选择的行。

D 删除模板块的第一行。

s 将每一行中第一处匹配的字符串替换指定字符

h 拷贝模板块的内容到内存中的缓冲区。

H 追加模板块的内容到内存中的缓冲区。

g 获得内存缓冲区的内容,并替代当前模板块中的文本。

G 获得内存缓冲区的内容,并追加到当前模板块文本的后面。

l 列表不能打印字符的清单。

n 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。

N 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。

p 打印模板块的行。

P(大写) 打印模板块的第一行。

q 退出Sed。

b lable 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。

r file 从file中读行。

t label if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。

T label 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。

w file 写并追加模板块到file末尾。

W file 写并追加模板块的第一行到file末尾。

! 表示后面的命令对所有没有被选定的行发生作用。

= 打印当前行号码。

# 把注释扩展到下一个换行符以前。【sed元字符集】通配符、正则表达式^ 匹配行开始,如:/^sed/匹配所有以sed开头的行。

$ 匹配行结束,如:/sed$/匹配所有以sed结尾的行。

. 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。

* 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。

[] 匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed。

[^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。

(..) 匹配子串,保存匹配的字符,如s/(love)able/1rs,loveable被替换成lovers。

& 保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。

< 匹配单词的开始,如:/

> 匹配单词的结束,如/love>/匹配包含以love结尾的单词的行。

x{m} 重复字符x,m次,如:/0{5}/匹配包含5个0的行。

x{m,} 重复字符x,至少m次,如:/0{5,}/匹配至少有5个0的行。

x{m,n} 重复字符x,至少m次,不多于n次,如:/0{5,10}/匹配5~10个0的行。【sed命令替换标记】g 表示行内全面替换。

p 表示打印行。

w 表示把行写入一个文件。

x 表示互换模板块中的文本和缓冲区中的文本。

y 表示把一个字符翻译为另外的字符(但是不用于正则表达式)

1 子串匹配标记

& 已匹配字符串标记【指定执行的地址范围】sed可以对单行或多行进行处理。如果在sed命令前面不指定地址范围,那么默认会匹配所有行。用法:n1[,n2]{sed-commands}

地址用逗号分隔的,n1,n2可以用数字、正则表达式、或二者的组合表示。

例子:

10{sed-commands} 对第10行操作

10,20{sed-commands} 对10到20行操作,包括第10,20行

10,+20{sed-commands} 对10到30(10+20)行操作,包括第10,30行

1~2{sed-commands} 对奇数行操作

2~2{sed-commands} 对偶数行操作

10,${sed-commands} 对10到最后一行($代表最后一行)操作,包括第10行

/oldboy/{sed-commands} 对匹配oldboy的行操作

/oldboy/,/Alex/{sed-commands} 对匹配oldboy的行到匹配Alex的行操作

/oldboy/,${sed-commands} 对匹配oldboy的行到最后一行操作

/oldboy/,10{sed-commands} 对匹配oldboy的行到第10行操作,注意:如果前10行没有匹配到oldboy,sed软件会显示10行以后的匹配oldboy的行,如果有。

1,/Alex/{sed-commands} 对第1行到匹配Alex的行操作

/oldboy/,+2{sed-commands} 对匹配oldboy的行到其后的2行操作输入方式有两种:1. 管道输入:(如格式一),2. input-file文件:(如格式二)

使用-e选项指定sed-script,-e可省略;使用-f选项指定sed-scriptfile,-f不可省略。

sed脚本使用方法有两种:1. 从文件读入命令,2. 直接运行脚本

```

[[email protected] ~]$ cat sed.sh

s/LKVM/lkvm/p

[[email protected] ~]$ sed -f sed.sh df.txt //方法一

[[email protected] ~]$ cat sed.sh

#!/bin/sed -f

s/LKVM/lkvm/p

[[email protected] ~]$ ./sed.sh df.txt //方法二## 用法实例

+ **查看sed版本号**

[[email protected] ~]$ sed –version

sed (GNU sed) 4.2.2+ **插入:`a` `i`**

[[email protected] ~]$ df -h|sed ‘i lkvm’ //在所有行前插入lkvm

[[email protected] ~]$ df -h|sed ‘3a lkvm’ //在第3行后插入lkvm

[[email protected] ~]$ df -h|sed ‘a lkvmnLKVM’ //在所有行后插入lkLKVM两行,sed支持通配符、n为换行符

[[email protected] ~]$ df -h|sed ‘a lkvm

LKVM’ //也可以这样, 表示一条命令尚未结束+ **删除:`d`**

[[email protected] ~]$ df -h|sed ‘2d’ //删除第2行

[[email protected] ~]$ df -h|sed ‘2,5d’ //删除第2-5行

[[email protected] ~]$ df -h|sed ‘2,$d’ //删除第2行以后所有行

[[email protected] ~]$ df -h|sed ‘2~2d’ //删除所有偶数行+ **修改:`c 整行替换` `s 文本替换` **

[[email protected] ~]$ sed -i ‘s/lkvm/LKVM/gp’ -f sed.txt

[[email protected] ~]$ df -h|sed ‘2c dev 1G 0 1G 0% /dev’ //第二行整行替换> `s`:sed命令,单独使用时表示将每一行中第一处匹配的字符串进行替换;

> `g`:sed命令`s`的替换标志之一,非sed命令,表示每一行进行全部替换;

> `-i`:为sed的选项,只能用在 -f sed-scriptfile [input-file]这种格式中,表示直接将修改结果应用于原文件input-file;

> `-p`:查找并打印出匹配行,`'p'`、`'/XXX/p'`分别表示整行查找以及安字符串查找。

[[email protected] ~]$ sed -n ‘1~2p’ person.txt

[[email protected] ~]$ sed -n ‘/CTO/,/CFO/p’ person.txt+ **分组替换`( )`和 `1` **

> sed的`( )`的功能可以记住正则表达式的一部分,其中,`1`为第一个记住的模式即第一个小括号中的匹配内容,`2`第二记住的模式,即第二个小括号中的匹配内容,sed最多可以记住9个。

[[email protected] ~]$ echo Villas Lake|sed -r ‘s#(.{6}) (.{4})#2 1#’+ **` & `代表被替换的内容**

> 正则表达式` w+ `匹配每一个单词,使用` [&] `替换它,& 对应于之前所匹配到的单词

[[email protected] ~]$ echo ‘this is a test line’ | sed ‘s#w+#[&]#g’

[[email protected] ~]$ echo ‘C’|sed ‘s#C#&++#’ //C–>C+++ **多点编辑: ` e `**

> `-e` 选项允许在同一行里执行多条命令

[[email protected] ~]$ sed -e ‘1,5d’ -e ‘s/test/check/‘ file+ **退出: ` q `**

[[email protected] ~]$ sed ‘10q’ file #打印完第10行后,退出sed+ **定界符: ` / `**

> 字符`/`在sed命令中扮演着定界符的作用,`|`和`:`的作用和`/`一样,可以做为定界符使用,当定界符出现在样式内部中,可以使用前缀``对它进行转义。,经过长期实践,建议使用`#`作为定界符,也可以在有`/`的文件中用`#`定界,在有`#`的文件中用`/`定界。

[[email protected] ~]$ echo “te/st1 te/st2 te/st3 “ | sed “s/te/st/TEST/g” //需要转义

[[email protected] ~]$ echo “te/st1 te/st2 te/st3 “ | sed “s#te/st#TEST#g // #符号在此不需要转义## 技巧集锦

+ **打印奇数行或偶数行**

[[email protected] ~]$ sed -n ‘p;n’ test.txt #奇数行

[[email protected] ~]$ sed -n ‘n;p’ test.txt #偶数行

[[email protected] ~]$ sed -n ‘1~2p’ test.txt #奇数行

[[email protected] ~]$ sed -n ‘2~2p’ test.txt #偶数行+ **移除空白行**

[[email protected] ~]$ sed ‘/^$/d’ test.txt+ **删除一个文件中所有的数字**

[[email protected] ~]$ sed ‘s/[0-9]*//g’ test.txt+ **删除每行开头的所有空格**

[[email protected] ~]$ sed -n ‘s/^ *//p’ test.txt+ **隔行删除**

[[email protected] ~]$ sed -n ‘1~2p’ test.txt+ **删除文件每行的最后一个单词**

[[email protected] ~]$ sed -nr ‘s/(.)([^a-Z]+)([a-Z]+)([^a-Z])/124/p’ test.txt+ **将格式为mm/yy/dd的日期格式换成mm:yy:dd**

[[email protected] ~]$ date +%m/%Y/%d |sed -n ‘s#/#:#gp’

```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值