『壹』 shell的sed用法
sed 是Unix中类似于awk的行编辑器,对于sed工具包的所有操作来说, 我们最关心的其实就是3个最主要的操作. 分别是printing(打印到stdout), deletion(删除), 和substitution(替换). 它与awk不同的地方在于sed是非交互的编辑器,而awk是可交互的编辑器。它即可以从stdin中接收文本输入, 也可以从文件中接收文本输入, 它对输入中的指定行搭谨进行特定的操作, 一行操作一次, 然后将结果输出到stdout, 或输出到文件中. 在shell脚本中使用的话, sed通常都是作为管道工具链知虚基中的一个处理部分来使用.
Sed的处理方法,上面你提到的表达式叫作“模式匹配”,是一种替换操作:
s/pattern1/pattern2/
意思是用 pattern2 替换pattern1并显示到屏幕上。
讲讲echo "uid=100(guest) gid=100(others) groups=10(users),11(floppy)"|sed 's/^[^(]*(\([^)]*\).*/\1/'的意思 :
echo 是向屏幕显示一行字符
“|”叫管道,象水管一样把“|”前面程序产生的输出作为“|”后的程序的输入。
sed 行编辑器。
's/^[^(]*(\([^)]*\).*/\1/' 对应上文提到的替换参数,分成两部分,pattern1:/^[^(]*(\([^)]*\).*/
表示以不是以“(”开始的字符后面跟任意字符,然后是贪婪匹配模式运算(),誉消任意以“(”字符开始,中间不包括")"字符的任意字符并以“)”后接。后面再接任意字符串。因为前面的程序输出“uid=100(guest) gid=100(others) groups=10(users),11(floppy)”,所以贪婪匹配模式得到结果(guest)
pattern2:/\1/ \1是正则表达式的贪婪匹配模式运算结果。
所以shell语句输出guest替换长长的一串“uid=100(guest) gid=100(others) groups=10(users),11(floppy)”
『贰』 Shell文本三剑客--sed
sed 是 stream editor 的缩写,流编辑器,主要用顷敏于对标准输出或文件进行逐行处理。
原模州文件test_sed.sh内容:
在testfile文件的第四行后添加一行,并将结果输出到标准输出,在命令行提示雀码枝符下输入如下命令:
a 动作是在匹配的行之后追加字符串,追加的字符串中可以包含换行符(实现追加多行的情况)
追加一行的话前后都不需要添加换行符 \n
追加多行
同理,指定行前插入内容
打印第3-4行
将第二行内容修改为111
搜索有root关键字的行
匹配有连续5位数字的行
或者
『叁』 shell脚本读取配置文件参数
1、 读取配置文件时,将注释符#标记的行和空行全部过滤 sed -E '/^#.*|^ *$/d' $env_file 。
2、 匹配指定参数相符的行并截取对应的值 awk -F "${param}=" "/${param}=/{print \$2}" 。
3、 获得的结果可能有多个,取最后一个值 tail -n1 。
4、这3步都用 | 管道兄茄符猛尘扒连接枝昌,其作用是将当前的结果作为下一条命令的输入,连续处理以达到获取参数的最终目的。
『肆』 求助各位大佬,shell中sed如何将时间参数作为条件进行筛选
楼主,你好:
你把那条sed语句改为:
sed -n "/$date2/旦雹p" /var/log/message-20170522
看看可以不.
如果不可以,你把你传入shell脚本的参数以及部分log日志文件发上来,我这边试一下
希望对伏悄楼主有缺迟渣帮助,欢迎追问
『伍』 linux shell sed命令用法
sed替换命令的结构为: s/A/B/
你在最后少了个斜杠/,结吵冲差构不完整判纳,会报升皮错。
修改为:
A=hello
ar=$(date"+%Y%m%d")
echoA|sed"s/he/$Var/"
『陆』 关于LINUX的几个指令寻求帮助awk、sed、grep 、vim。关于他们之间的关系,哪位用大白话指点一下迷津,不胜
vim 是文本编辑器,类似windows中的notepad,功能很强颤余大,但需要去学习、适应一段时间才能使用得手。
grep命令是一个非常实用的shell命令,其功能为查找与命令后面内容匹配或不匹配的东西,可以与冲饥各种命令混合使用,效果很好,如:
1、查看文件a.txt中有"LINUX"这个词的所有行:grep LINUX a.txt
2、查看文件a.txt中没有"LINUX"这个词的所有行:grep -v LINUX a.txt
3、结合管茄判滚道命令:cat a.txt|grep LINUX (与1同),cat a.txt|grep -v LINUX (与2同)
sed、awk是两个非常强大的shell工具(不单纯是命令),他们各有超强的能力,甚至可以编程进行应用处理,关于他们的使用有专用的书介绍,内容非常多。sed多偏重于正则表达式方面的应用,实现查询替换等操作。awk的程序处理能力显示的更强。
『柒』 shell编程中的sed问题
line1=`sed -n -e '/^labA/=' file|head -n 2|tail -n 1`
line2=`sed -n -e '隐拦带/^labB/=' file|head -n 2|tail -n 1`
获取第二个匹配的灶芦2行行号,衡衫获取之间的数据
sed "${line1},${line2}p" file