sed 匹配多个字符串的行打印

匹配多个关键词,打印出匹配的行,效果类似于 grep

grep hello\|world file > output

或者用扩展正则

grep -E ‘(hello|world)‘ file > output

如果grep用的是 -e 小写e参数,需要加上反斜杠转移,即:

grep -e ‘\(hello\|world\)‘ file > output

GNU sed 写法

sed -n ‘/hello\|world/p‘ file > output

这种写法 UNIX的sed不支持,真是奇怪,UNIX的sed需要下面这样的写法,这种写法GNU的sed也支持。

sed -n ‘/hello/p; /world/p‘  file > output
时间: 2024-11-05 20:33:39

sed 匹配多个字符串的行打印的相关文章

sed匹配多行并替换其中的内容

sed -i '/aaa/{:a;n;s/123/xyz/g;/eee/!ba}' yourfile 如题:aaa123123123123123eee怎么匹配aaa~eee(开始结束字符串确定),然后替换123这样的 先匹配aaa,匹配到后执行大括号里的语句. n 读取下一行 s/123/xyz/g  将123替换为xyz,全局替换,同一行中出现几次替换几次 :a 设定跳转标签a /eee/!ba  若当前行匹配不上eee,则跳转到标签a处继续执行,构成一个循环.若匹配到eee,则退出循环,se

grep 不打印匹配到的字符串

在使用grep 搜索到字符串时,输出信息如下: Matched to a binary file:log 从打印消息上看,这个文本文件被当作二进制文件. 为什么? 用vim 打开log 发现原因,log文件有个^@字符,这其实就是c语言字符串结尾的'\0',被哪位粗心的哥们写日志里了. 现在要做的就是删除'\0' cat log | tr -d '\000' 重新grep, OK 打印出搜索到的字符串. grep 不打印匹配到的字符串

linux查看匹配内容的前后几行(转)

linux系统中,利用grep打印匹配的上下几行 如果在只是想匹配模式的上下几行,grep可以实现. $grep -5 'parttern' inputfile //打印匹配行的前后5行 $grep -C 5 'parttern' inputfile //打印匹配行的前后5行 $grep -A 5 'parttern' inputfile //打印匹配行的后5行 $grep -B 5 'parttern' inputfile //打印匹配行的前5行 //搜索inputfile中满足partter

sed匹配与替换

今天发现之前创建nagios用户是在/bin/bash下的,存在一定的安装隐患,由于涉及的服务器数量较多,所以采用saltstack命令行批量更改. 利用sed匹配字符串(nagios)所在行,并且替换这行的一些关键字(/bin/bash) salt '*' cmd.run "sed -i '/nagios/s#/bin/bash#/sbin/nologin#' /etc/passwd" 首先匹配nagios用户这一行,s替换,#为分隔符,将/bin/bash替换为/sbin/nolo

sed 匹配字符替换

/bin/sed -i "[email protected]_DIR=.*@DEPLOY_DIR=/home/web/[email protected]" /home/git/bmw/si.git/hooks/post-receive 匹配post-receeive文件下的DEPLOY_DIR=字符更改为DEPLOY_DIR=/home/web/$PROJECT /bin/sed -n "/DEPLOY_DIR/p" file 文件 查询打印字符 在指定行的前/后插

shell 脚本---每隔几个小时查看日志文件中包含某些字符串的行数

在linux生产环境下,有如下这样的一个平常运维需要的工作. 每隔一段时间,比如两个小时,就要对每秒都要产生日志的日志文件(这里假设为testfile.out,其绝对路径为/home/panlm/shellpra/testfile.out)进行一个操作,这个操作是将日志中包含某些字符串的行给单独打印出来,并重新放在一个文件(这里的文件假设为out.log)中.这些需要匹配的字符串可以按这种方式表示"0x216000ab"其中ab为01到18的连续整数. 实现这样一个要求的做法主要有两步

sed 匹配\n换行符

假设 str="a,b,c,d" echo ${str} | sed "s/,/\n/g" 输出: a b c d echo ${str} | sed "s/,/\n/g" | sed "s/\n/,/g" 输出: a b c d 没有匹配到\n换行符 这是因为sed 模式是以\n换行符作为行的结束标记的.它没有办法匹配到\n再替换 解决方法: echo ${str} | sed "s/,/\n/g" |

day1: 变量,多行打印,for循环,while循环,break

print('Hello,world!') name = 'cc' name2 = name name = 'cuichen' print(name,name2) name2 = name 只是通过name指向'cc',name2并不指向name,所以即使name指向改变,name2并不改变 理解变量在计算机内存中的表示: a = 'abc' 当我们运行以上代码时,Python解释器干了两件事,1.在内存中创建了一个'ABC'字符串,2.在内存中创建了一个名为a的变量,并把他指向'ABC' fo

sed匹配

sed正则 sed匹配root字符并打印输出到屏幕显示,-n表示不输出不相关的字符行 [[email protected] tmp]# sed -n '/root/'p passwd root:x:0:0:root:/root:/bin/bash [[email protected] tmp]# sed '/root/'p passwd sed输出匹配字符会把对应行输出两次并显示出来 root:x:0:0:root:/root:/bin/bash root:x:0:0:root:/root:/b