linux下的sed命令

查看sed命令帮助信息:

具体使用方法上面都有介绍,sed是一个流编辑器,它会读取文件中的每一行数据,然后放入缓冲区(也称为模式空间)中进行处理,处理完后再读取下一行数据,如此反复,所以它是针对行级别的一个处理。

默认sed命令处理完后会将文件内容打印到屏幕,

  • -e选项:可以指定一个处理的脚本语句,也可以省略。
  • -n选项:打印模式空间处理后的内容,不指定则打印整个模式空间内容。
  • -s选项:在同时指定多个文件时使用,否则将被认为是一个长输入。
  • -i选项:写入文件,否则只是打印到屏幕。

脚本支持的选项有:

这些都可以通过man手册查看。

比如打印第一行:

值得注意的是,-e编辑脚本应该用单引号,而不是双引号,多数情况双引号也可以用。在linux系统中,单引号与双引号是有区别的,双引号会进行变量替换等,单引号则是纯字符串。

打印出每一行的行号:

sed '=' filename

所以只需要打印出最后一行的行号,即可知道总行数。

打印总行数:

sed -n '$=' filename

这里也支持正则表达式元字符。

打印开头为root的行:

在脚本中指定相应的正则即可,/后面就是一组,直到遇到下一个同样的标识符/,替换其实也可以看做是查找然后替换,所以语法是

s/old/new/

打印开头为root的行到开头为ftp的行:

删除第二行到最后一行(这里没有指定-n选项,表示打印模式空间内容,即没有被删除的行,第一行):

将第一行的root都替换为ROOT,打印结果。

可以同时指定多个脚本,多个脚本的时候需要显式的指定 -e 选项,后面跟脚本,按顺序执行,先将第一行替换root为ROOT,然后打印第一行。

比如将小写转换为大写:

sed 's/[a-z]/\u&/g' filename

将大写转换为小写:

先将源文件内容修改为转换大写之后的内容

查看源文件:

sed 's/[A-Z]/\l&/g' filename

注意,这里的 \l&是字母L。

如果要替换首字母,则用正则表达式里的\b来匹配边界。

sed 's/\b[A-Z]/\l&/g' filename

这里转为了首字母小写,其余字母大写;转为首字母大写,其余小写写法是相同的:

sed 's/\b[a-z]/\u&/g' filename

这个也比较好记,转大写是 \u(upper),转小写是 \l(lower)。

\u:将下一个字符转为大写。

\U:将所有字符转为大写。

\l:将下一个字符转为小写。

\L:将所有字符转为小写。

这里(root)匹配的是 root 四个字符。所以 \u 将 root 的第一个字符 转为了大写 R。

这里 [root] 匹配的是一个取值范围,只要是 root 这四个字符都会被匹配到,所以匹配到的是单独是四个字符,而不是一个字符串,与上面对比,上面匹配的是一个字符串,这里的四个字符被 \u 接收到,于是就将四个字符都转为了大写。

上面的方式也可以将字符都转为大写:

小写同理。

至于这个&符号,代表上次命令的执行结果,拿上面的例子来说,s/[A-Z]/\l&/g

首先匹配[A-Z],&符号的位置将被替换为这个匹配结果,然后对这个匹配结果执行\l命令。

比如下面的例子:匹配root,然后用&接收匹配到的root,变为root is best。

暂时学会这么多,后续再补充。


在查找时忽略大小写,与其他的不同,grep是用 -i 来忽略大小写,sed是 I 忽略大小写。例如:

文件如下

查找包含root不区分大小写:

sed "/root/Ip" a -n

在替换 s 命令中就是小写 i 了:

sed "s/root/test/ig" a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值