linux下查看txt文件中有没有某内容,Linux 文本查看命令之sed

Stream Editor 流编辑器 做行处理的

默认不直接编辑原文件,在内存中进行处理(但是会整篇处理),临时存放的空间叫做pattern space(模式空间)。如果可以被关键字匹配,然后就进行编辑(编辑完成后,可以将新的内容放入hold space,保持空间),如果没有被关键字匹配就默认输出到标准输出。

-n选项不输出模式空间中的内容至屏幕,默认情况下,不论模式空间的内容是否匹配关键字都会输出至屏幕。

-e script 默认只能一次处理一个脚本,-e 之后可以跟多个脚本,一个-e对应一个脚本,实现多点编辑。

-f /path/to/sed_script_file 每行一个编辑命令

-r 支持扩展正则表达式

-i 直接编辑原文件

地址定界

指定编辑范围

空地址表示对全文进行处理

单地址 # 指定行

/pattern/ 被关键字匹配到的每一行

地址范围

#,# 指定行范围

#,+# 指定开始行,并往下#行

#,/pattern/ 指定行开始,到第一次匹配关键的行

/pattern1/,/pattern2/从第一次匹配关键字1开始,到第一次匹配关键字2的行

1~2 ~#表示步进,从第一行开始的奇数行

2~2 从第二行开始的偶数行

编辑命令 都是在操作  模式空间

d 删除指定范围内容

2fd7c591a3fa591a1a753d5ed9a7536c.png

a1fd31640705b4966c459b1e97030003.png

原文件没有改变

删除(不显示)包含UUID字符串的行

e581d58b4f23ab93785f9ffc202bd7f0.png

注意:这两次d的位置 一次是在''里面,一次是在//外面

b1d3ee118b62d41ac33f3211ecd15dea.png

可以在外面

现在看看-n的效果

74ab1af33df5dd1070da61c5b9549052.png

加了-n 什么都看不到了

显示奇数行

e2e1299942947dac851bd0d5082f535b.png

删除偶数就是奇数

显示偶数行

3b754ed368e6d9b83cd8f74cc5c899d7.png

删除奇数就是偶数

p:显示模式空间中的内容

d6ef863e1b9ad1d0b6057d0515e2ef33.png

为什么1和2出现了两次呢?因为,sed模式会将模式空间中的内容输出来,p的效果是将1和2输出,所以1和2输出了两次,为了不让模式空间的内容输出,只看p的效果,可以加个-n

4ea5a2c680b3cb076468a3a16a6903bd.png

显示奇数行

60862e373c6b8a6ef2b9063b0068cb4d.png

显示1到3行

0dc33209749e75c099d209fa194392ac.png

在指定位置增加内容

# \text

在第3行后增加指定内容

851af8191b81f11444375f3083c0d8b0.png

添加后的效果,和-n的效果 如果追加的内容里有空格也不用管

在第三行增加多行内容

624fb7672aa0b2d48e98a5930998c2cd.png

注意:需要在单引号中写出需要追加的内容

在第三行追加内容,之前的第三行就变成第四行了。

c1bbec7ed64e714186c3b64d33e655fa.png

使用指定内容替换指定行

c \text

ed174f0b55c281902bf0d41a6b9aa5f5.png

数字3没了,被This is a test字符串替换了

w将指定范围内的内容另存为其他文档

d450b368e876a1a9f34b088da76c1ef5.png

将非#号开头的行输出来

efb50d18d54807e708e1a14939d78596.png

这里可以看出,sed是支持正则表达式的,这个例子的难点就在于如何标识非#号

r将其他文件的内容追加到指定行

f21f3796e7cc9de1e3332b45f0f83639.png

在第四行之后追加内容。

为指定行打印行号

fbbbb1ad278e346f09e6a9fa251701ff.png

先打印行号,在输出行的内容

! 条件取反

将非#号开头的行输出来

7f9418dd430bb5ff8bca8f7209ff2877.png

第一个是非#号开头的行,第二个是#号开头的行,第二个命令我用了! 条件取反,而且注意这里的!需要转义,不然就解析为最近一次以p开头的命令并执行

da343622adc6688e50ebe1a0b9079f53.png

s 查找替换

这个类似于VIM编辑器的查找替换操作,分隔符可以执行指定 @ # 都可以,g表示全局替换(默认选项) w将替换后的内容另存为 ,p显示替换成功的行

删除文件中所有以空白字符开头的行的行首的所有空白符

d434704f99e5380f5947d3f164501814.png

这个是原文

8e94928aa15f71fc3ba40a6a1a0d8c2d.png

这个是改过之后的,默认是全局又该

d913755f742e16dca3bd4e394d483b13.png

这个就显示被修改过的行

把文件中的1改为a

c297a971bf12e51d19dce1c9ad80191f.png

将指定行的1改为a

8c0436ee49dc4d13940fa418131a999a.png

a6e3fa84ca37c16c176f1680850f6415.png

sed可以一次执行多次编辑操作

将/etc/fstab中的UUID改为uuid,再将uuid所在的行删除

d7d8fd39862120ef6ee83486a41e5b15.png

2cf85de63bf78e2aea1a351736f423da.png

输入一个绝对路径给sed命令,取出其目录,类似于dirname的命令

04465c24223f4d5e72f2009f9e8841e8.png

发现没有t没有了

我现在加个尾部的定位符

7b6a00b8f1a7bd13a5359736ad5aebd0.png

发现i字符没了,所以现在要取出dirname很简单啦

5d9fee85323cd15bd46be340f7790c0f.png

输入一个绝对路径的sed,取出其文件名,类似于basename的命令

80964e36ce399b6aa7b7e7fc48ec0433.png

这里要取代的是一个范围,需要用\1的方式

0e05493791757caac32299d181ad7d2c.png

高级编辑命令

h 将模式空间中的内容覆盖至保持空间中

H 将模式空间中的内容追加至保持空间中

g 将保持空间中的内容覆盖至模式空间中

G 将保持空间中的内容追加至模式空间中

x 将模式空间中的内容与保持空间中的内容互换

n 读取匹配到的行的下一行至模式空间中。

N 读取匹配到的行的下一行至模式空间中 追加

d 删除模式空间中的行

D 删除多行模式空间中的所有行

p显示模式空间中的内容

案例一显示偶数行

0cbfe77f20702044fec4e7ad15b63168.png

5a19fdb7a6f93dc8efb2d7879ba92190.png

由于没有指定操作范围,程序首先读入第一行,n的效果是让命令去读取本行的下一行,并将内容读入到模式空间,p的效果是将匹配的模式空间中的内容输出。

案例二 逆序显示文件内容

sed ‘1!G;h;$!d’ file_name

d39aeddf5f7aa8c5b923b0db96c102b3.png

从这个例子中,重新说明了几个问题,第一:sed 从文件中读取的内容首先放入模式空间中,通过匹配之后再放入保持空间中 第二:sed 读取内容是以行为单位的。第三 $符号的意思是读取内容的最后一行。 这个命令的过程类似于汉诺塔的游戏。

案例三 显示最后一行

sed '$!d' filename

1d4a218a89e28cb17d7ccb19264191f4.png

案例四 显示最后两行

sed '$!N;$!D' 显示最后两行

6540c7f1f1d7e1b5d86de1d9a01f4cb6.png

当系统读入倒数第二行,由于倒数第二行不是倒数第一行那么就N,读取倒数第一行并追加。现在的模式空间中有2行,程序读取了倒数第一行那就不删除(!D),最后输出到屏幕

案例五

显示奇数行

sed 'n,d' filename

15324a52ab1e04ff650822870680e59c.png

d62b93fe8de7efe11532a0a754802a46.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值