首页 > 系统相关 >【shell】sed 命令

【shell】sed 命令

时间:2022-11-11 12:08:26浏览次数:49  
标签:shell aaa naaa aaabbb 命令 sed localhost ccc


sed全名是stream editor,文本的流式处理器。所谓的流式是与交互式相对的,交互式处理器比如vim。

 

用法:

1)行内替换;

使用s命令,格式为sed "s/pattern/replacement/flags"。

pattern是新内容,replacement是老的要被替换的内容,支持Basic RE。

flags是替换选项,总共有以下四种:

a)数字,表示替换第几处,模式只替换匹配的第一处;

b)g,整行内所有匹配到的全部替换;

c)p,仅将匹配到的行打印出来,这个一般和-n一起使用,-n表示忽略sed本身的输出,也就是仅仅打印匹配出的内容;

d)w,将替换的结果写入文件中。

例子:

miracle@localhost:~|⇒  echo "aaabbbaaa" | sed "s/aaa/ccc/"
cccbbbaaa

默认不加flags,只替换匹配到的第一处。

miracle@localhost:~|⇒  echo "aaabbbaaa" | sed "s/aaa/ccc/g"
cccbbbccc

加上g,整行内所有匹配到的都被替换。

miracle@localhost:~|⇒  echo "aaabbb\naaa" | sed -n "s/aaa/ccc/p"
cccbbb
ccc
miracle@localhost:~|⇒  echo "aaabbb\naaa" | sed  "s/aaa/ccc/p"
cccbbb
cccbbb
ccc
ccc

如果不加-n,将会输出两次,这是因为第一次是sed命令的输出,第二次是p标记的输出,如果加上了-n,那么会省去sed命令的输出,结果更清楚。

miracle@localhost:~|⇒  echo "aaabbb\naaa" | sed  "s/aaa/ccc/w a.txt"
cccbbb
ccc

miracle@localhost:~|⇒  cat a.txt
cccbbb
ccc

使用w标记将替换结果保存在一个文件中。

 

2)使用地址

sed命令都可以加入地址,用来指定行号。

格式为[address]commend

举个例子:

只替换第一行,在s命令前指定行号1即可:

miracle@localhost:~|⇒  echo "aaabbb\naaa" | sed  "1s/aaa/ccc/w a.txt"
cccbbb
aaa

还可以指定范围,使用n,m的格式即可:

miracle@localhost:~|⇒  echo "aaabbb\naaa\naaa" | sed  "2,3s/aaa/ccc/g"
aaabbb
ccc
ccc

或者使用$来指定尾行,要加转义符:

miracle@localhost:~|⇒  echo "aaabbb\naaa\naaa" | sed  "2,\$s/aaa/ccc/g"
aaabbb
ccc
ccc

 

3)文本过滤器:

格式为/pattern/command

首先说一下这个用法的作用,不是可以通过s命令加正则匹配搞定过滤和替换吗,为什么还要加一个过滤器?

因为,有时匹配和替换是分开的,比方说要搜出带有xxx的行,将其内部的yyy替换为zzz。

例子:

miracle@localhost:~|⇒  echo "aaabbb\naaa\naaa" | sed  "/bbb/s/aaa/ccc/g"
cccbbb
aaa
aaa

这里仅仅将包含有bbb的行中的aaa替换为ccc。

注意这里介绍的寻址和过滤器可以用于sed所有的命令上,插入删除修改等等。

 

4)删除命令:

格式为/addredd/d

比如:

miracle@localhost:~|⇒  echo "aaabbb\naaa\naaa" | sed  "/bbb/d"
aaa
aaa

将包含bbb的行删除掉。

 

5)插入和追加(IOS好像不支持)

格式为/address/cmd newLine

这里的cmd可以为:

i\:表示在匹配行前插入新行;

a\:表示在匹配行后插入新行;

miracle@localhost:~|⇒  echo "aaabbb\naaa\naaa" | sed  "/bbb/i\hhh":

在包含bbb的行的前面插插入。

miracle@localhost:~|⇒  echo "aaabbb\naaa\naaa" | sed  "2a\hhh"

在第二行后面插入。

 

6)修改行

这个用法和插入追加是一样的,与s命令的区别在于这个命令是整行修改的。

/address/c\ newLine

 

另外sed命令默认是不修改原文件的,如果想要修改可以添加-i参数。

 

 

 

 

标签:shell,aaa,naaa,aaabbb,命令,sed,localhost,ccc
From: https://blog.51cto.com/u_15873544/5844089

相关文章

  • django 命令行方式使用model建数据库
    提前建立好项目根目录mysite,cd到mysite里面,使用如下命令创建一个名为FirstSql的项目:pythondjango-admin.pystartprojectFirstSql再cd到FirstSql下面,构建一个app,这个app......
  • django+命令行 Helloworld程序
    这里说一下如何使用命令行的方式来构建一个Helloworld项目。当然,python和django一定要先安装。这个在另一篇中有提到,就不细细说了。一切安装完毕之后,就可以新建工程了,选择一......
  • MIT 6.828 Homework: shell
    实验提供了一个shell的简化版本,主要功能是解析shell命令并且执行在提供的shell代码中已经编写好了对命令进行解析的部分,我们需要的是利用Unix系统调用对命令进行执行Exec......
  • Android实战简易教程-第四十三枪(Shell Script 运行Command)
    android系统运行于DalvikVM中,有着与Linux雷士的ShellCommand指令,可通过Runtime().getRuntime().exec()来运行指令。下面我们就通过代码来实现这一功能,体验一下命令行。1.a......
  • 1. linux常用命令
    1.远程连接[email protected]#指定端口号用户名和IP默认端口56:ssh3306:mysql80:http443:https6379:redis 2.查看网卡信息ifconfig......
  • Linux vmstat命令实战详解
    vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix......
  • ulimit命令优化linux进程连接数等…
    在Linux下面部署应用的时候,有时候会遇上Socket/File:Can’topensomanyfiles的问题,比如还有Squid做代理,当文件打开数到900多时速能就非常快的下降,有可能打不开网页.其......
  • python和shell产生随机密码,哪个更方便
    一、Python#@File:生成随机密码.py#@desc:importstringimportrandom####侯选all_words=list(string.ascii_lowercase+string.ascii_uppercase+string.digits......
  • tmux 常见命令集合
      tmuxnew-smysession创建名为mysession的会话tmuxls显示会话列表tmuxa连接上一个会话(最后创建的那个会话)tmuxa-tsession_name连接指定......
  • MybatisPlus Caused by: java.sql.BatchUpdateException: Field 'id' doesn't have a
    在使用MybatisPlus时,使用saveBatch()批量保存数据的时候报错Causedby:java.sql.BatchUpdateException:Field'id'doesn'thaveadefaultvalue,这是因为MybatisPlus不......