shell表达式(Shell编程之正则表达式(sed))
本文目录
- Shell编程之正则表达式(sed)
- shell:echo $(num$i) ,i为变量,求正确表达式
- Linux,shell脚本里一个关于正则表达式的问题
- 最近学shell,在awk里,在语句的什么位置用正则表达式例如 awk ’BEGIN {FS=“;“ $4~/root/}’ testfile
- shell脚本和正则表达式有什么不同
- shell脚本,正则表达式,如何批量替换多个文件夹中指定字符中的指定字符
- 关于shell 中的if 逻辑表达式
Shell编程之正则表达式(sed)
sed 是一个流器,读取文件一行,存放在缓存区, 然后处理,最后输出。 sed功能很强,支持增、删、改(替换)、查。 sed ’command’ file(s) 与grep一样,sed在文件中查找模式时也可以使用正则表达式(ER)和各种元字符。 使用基本的元字符集^,$,*,,《》,(),{}使用扩展元字符集?,+,{},|,() 使用扩展元字符的方式 + sed -r sed对指定进行操作,包括打印、删除、修改、追加等 sed选项参数 -e 允许多项 -n 取消默认的输出 -i 直接修改对应文件 -r 支持扩展元字符 -------------------- a 在当前行后添加啊一行或多行 i 在当前行之前插入文本 c 在当前行进行替换修改 d 在当前行进行删除操作 p 打印匹配的行或指定行 n 读入下一输入行,从下一行命令进行处理! 对所选以外的所有行应用命令 h 把模式空间里的内容重定向到暂存缓存区 H 把模式空间里的内容追加到暂存缓冲区 g 取出暂存缓冲区的内容,将其复制到模式空间,覆盖该处原有内容 G 取出暂存缓冲区的内容,将其复制到模式空间,追加在原有内容后面 ================================== 1)多重选项e //先删除行,然后管道给后面的sed进行替换 # sed ’1,9d’ passwd | sed ’s#root#alex#g’ //使用-e进行多次修改操作 # sed -e ’1,9d’ -e ’s#root#alex#g’ passwd ----------------------------------------------------------------------------- 2)sed的打印命令p 打印匹配halt的行 # sed -n ’halt/p’ passwd 打印第二行的内容 # sed -n ’2p’ passwd bin:x:1:1:bin:/bin:/sbin:nologin 打印最后一行 # sed -n ’$p’ passwd --------------------------------------------------------------------------- 3)sed的追加方式 给30行添加配置 # sed -i ’30a listen 80;’ nginx.conf 在37行添加一条记录,\t tab键(需要转义) # sed -ri ’37a \\t Listen 8080;’ nginx.conf 在37行添加一条记录,\n 换行符(需要转义) # sed -r ’37a \\n LIsten 8080;’ nginx.conf --------------------------------------------------------------------------- 4)sed修改命令c 指定某行进行内容替换 # sed -i ’7c SELINUX=Disabled’ /etc/selinux/config 使用正则匹配对应的内容,然后使用sed的c命令进行替换 # sed -i ’/^ *server_name/c server_name liu.com’ nginx.conf //非交互式修改指定的配置文件 # sed -ri ’/UseDNS/c UseDNS no’ /etc/ssh/sshd_config # sed -ri ’/GSSAPIAuthentication/c #GSSAPIAuthentication no’ /etc/ssh/sshd_config # sed -ri ’/^SELINUX=/c SELINUX=disabled’ /etc/selinux/config --------------------------------------------------------------------------- 5)删除命令d //指定删除第三行,但不会改变文件内容 # sed ’3d’ passwd # sed ’3{d}’ passwd //删除最后一行 # sed ’$d’ passwd //删除所有的行 # sed ’1,$d’ passwd //匹配正则进行该行删除 # sed /mail/d passwd 例子: # mysql -uroot -p345.com -e "show databases;" Database infornamation_schema mysql performance_scheme wordpress world # mysql -uroot -p345.com -e "show databases;"|sed 1d infornamation_schema mysql performance_scheme wordpress world =========================================== 6)插入命令 i //在文件的某一行上面添加内容 # sed -i ’30i listen 80;’ passwd --------------------------------------------------------------------------- 7)写文件命令w //将匹配到的行写入到新的文件中 # sed -n ’/root/w newfile’ passwd //将passwd文件的第二行写入到newfile中 # sed -n ’2w newfile’ passwd --------------------------------------------------------------------------- 8)获取下一行命令n //匹配root的行,删除root行的下一列 # sed ’/root/{n;d}’ passwd --------------------------------------------------------------------------- 9)反向选择命令! //除了第三行,其他全部删除 # sed -r ’3!d’ /etc/hosts ============(持续更新)============
shell:echo $(num$i) ,i为变量,求正确表达式
#!/bin/bashlet max=0for i in `seq 1 10`;do declare num=$RANDOM echo ${num}donefor n in `seq 1 10`;do if ;then max=${num} fidoneecho "the max num is $max"
Linux,shell脚本里一个关于正则表达式的问题
因为正则匹配的时候就是这样的。看这个:s/\(.*\{3\}\)/\1,\2/ \(.*\) --》 这是一个组,后面用\1来原封不动地引用\(\{3\}\) --》 这又是一个组,后面用\2来原封不动地引用 第一个组匹配以一位数字结尾的任意字符串,第二个组匹配连续的3个数字。.*是贪婪的,所以,最先匹配得到的是 1234567,890 t start --》 跳转到start继续执行,这就是sed中使用循环语句的典型方法。
最近学shell,在awk里,在语句的什么位置用正则表达式例如 awk ’BEGIN {FS=“;“ $4~/root/}’ testfile
awk中使用正则大致就下面三种形式。
形式一(跟你给出的类似):
awk ’/正则/{主体处理}’ file
默认匹配$0,相当于 $0~/正则/
正则匹配后默认会打印匹配到的内容,所以若主体语句仅仅是print,可直接省略。
形式二:
awk ’{if($4~/root/) print}’ file
在主体语句的if判断里使用正则。
形式三:
awk ’{内置字符串处理函数}’ file
在awk内置的字符串处理函数中使用正则,如sub, gsub, gensub, match等。
echo "ABC^H^H^H^HDEF" | awk ’{gsub(/\^H/,"");print $0}’
将所有^H替换为空,输出替换后的字符串。
这里gsub中省略了第三个参数“源字符串”,默认使用$0来匹配。
-------------------------------------------------------
大部分情况下,正则都是跟主体语句相关的,所以这里抛开awk的BEGIN和END语句块不看。
BEGIN语句块属于预处理,尚未读入要处理的数据,用不上正则;
END语句块属于后处理,可以用正则但少见,因为复杂的逻辑判断尽量都放在主体中完成。
shell脚本和正则表达式有什么不同
不一样的东东。shell脚本是为shell编写的自动执行命令的集合,是一种编程语言。而正则表达式则是用于文本搜索匹配的一种非常强大的字符串查找工具。两者不是一样的,shell脚本中可以使用正则表达式,Javascript脚本也可以使用正则表达式,Php,asp,C,C++和C#,Java等编程语言也都可以使用正则表达式。
shell脚本,正则表达式,如何批量替换多个文件夹中指定字符中的指定字符
用ReplacePioneer处理很轻松,找到")"和"("之间的内容,把"、"替换成"|"就可以了。需要说明的是,你的括号是中文括号"()"而不是英文括号"()",所以不用转义。以下是详细步骤:1.ctrl-o打开待处理txt文件2.ctrl-h打开replace窗口*在Searchforpattern下面输入:"(^|)).*?((|$)"(不包含左右的双引号)*在Replacewithpattern下面输入:"replace($match,’、’,’|’)"(不包含左右的双引号)3.点击Replace,完成。****************另外,这里再给你一个纯正则表达式的版本:把"、(?=*((|$))"替换成"|"就可以了。你也可以在ReplacePioneer的searchforpattern输入"、(?=*((|$))"(无双引号),然后在replacewithpattern输入|就可以了。
关于shell 中的if 逻辑表达式
if expression then commandsfi 这是if其中的一种结构,在结构中就能看到if 后面接的是什么。这个后边描述的是你想要干什么,根据你的需要去描述出来然后进行下一步的操作这个并不是固定的。你还是看书吧。。书上写的比这里回答的人描述的详细。if和then的语法 如果if和then处在同一行 中间需要用;隔开,如果不在同一行可以不用写if grep "file " /tmp/tmp.txt ;then 这属于语法格式,这个是固定的。其实一行内多个命令之间都需要用;号隔开。如果不在同一行就不用考虑。就像你在终端输入命令一样,一行一个命令。一行多跳命令需要用;隔开。。也是这个道理。至于!取反。。!属于操作符 举个例子来说 $A = $B 如果结果匹配 执行 then 不匹配执行else $A != $B !=就是不等 !进行取反操作 如果判断结果匹配 执行then 不匹配执行eslse 哇。。说了好多废话。。我还是强烈建议你仔细看书。。 ______________________________________________1)我还是建议你看书,而且是看对书,我说的这些都是书上有的。关于就是test 抛开if不讲 test也可以单独使用 比如test xxx 写成 意思是一样的。至于里边加的参数,就涉及到你的需求 要干什么 要判断字串?整数?表达式?文件?跟用test 还是用 意思是一样的2)要解释if ! grep "file" /tmp/tmp.txt ; then 首先你要明白系统所设置的操作符。比如= 比如+、-、*、/、这些都是操作符,至于! 属于位操作符, 我下班了。有空聊
更多文章:
北斗卫星地图导航下载2021新版(手机要使用北斗卫星导航,要如何去下载)
2024年6月11日 07:21
网站安全检测报告(奇安信 安全检测,验证网站提示: 验证失败 重试 您的网站不能访问)
2024年5月12日 12:56
中国第一家团购网是谁开的?如果第一团购网 给你的密码是用过的 我们应该怎么办
2024年7月24日 12:21
关于丧尸片结尾是一个女人在直升机上醒来,整个都是一场梦?讲一群人去一个在城市的别墅玩游玩,后面空军洒下的丧尸病毒的电影
2024年4月30日 19:53
苏宁易购上的旗舰店,是苏宁经销,还是官方直销?苏宁易购自营店和店铺有什么区别
2024年5月17日 08:34
wifi电视怎么看电视台(内置wifi的液晶电视怎样看网络电视频道)
2024年9月8日 08:10
beyond图片(求beyond黄家驹的头像照片,越多越好,悬赏越高)
2024年7月8日 05:47
天天酷跑永久圣斗狮怎么抽 圣斗狮抽奖技巧?天天酷跑:分享冥斗狮和圣斗狮哪个好
2024年5月8日 07:00
超变态手游传奇上线99999级(跪求超变态手游传奇,装备好看,属性变态那种)
2024年7月15日 07:24