xml地图|网站地图|网站标签 [设为首页] [加入收藏]

ruby使用正则表达式之实例1,Linux正则表达式sed

来源:http://www.ccidsi.com 作者:最新解决方案 人气:133 发布时间:2019-07-31
摘要:aa="" sed、awk工具得以兑现公文替换何况把替换的文书输出到荧屏上 sed和awk都以流式编辑器,是针对文书档案的行来操作的。sed平时用来替换操作。 Linux正则表明式sed 详述 sed、awk工具得

aa=""

sed、awk工具得以兑现公文替换何况把替换的文书输出到荧屏上
sed和awk都以流式编辑器,是针对文书档案的行来操作的。sed平时用来替换操作。

Linux正则表明式sed 详述

sed、awk工具得以兑现公文替换何况把替换的公文输出到荧屏上
sed和awk都以流式编辑器,是针对文书档案的行来操作的。sed平常用来替换操作。

示范的文本内容,以下操作依照此文件。
[[email protected] ~]# cat test.txt 
rot:x:0:0:rot:/rot:/bin/bash
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
rooooot:x:0:0/roooooot:/bin/bash
11111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

1、打字与印刷某一行
sed -n 'n'p filename 单引号内的n是一个数字,表示第几行;p也得以写到引号内;

示例,打印passwd第3-5行;

[[email protected] ~]# sed -n '3,5'p /etc/passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

打字与印刷全数行

[[email protected] ~]# sed -n '1,$'p /etc/passwd

打字与印刷某一行,并且要展现行号,须要和grep一齐使用;

[[email protected] ~]# grep -n '.*' test.txt | sed -n '1'p
1:rrt

2、打字与印刷带有有些字符串的行

字符串须要用/ /括起来;grep中的特殊符号^ $ . * 同样适用于sed中。
[[email protected] ~]# sed -n '/root/'p /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

打印带有/sbin/nologin的行,/须要开始展览脱意;
[[email protected] ~]# sed -n '//sbin/nologin/'p passwd 
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

打字与印刷以d起初的行;打印以in结尾的;打字与印刷r与o字母中间有2个随机字符的;打字与印刷带有2个o及四个o的行;
[[email protected] ~]# sed -n '/^d/'p test.txt 
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[[email protected] ~]# sed -n '/in$/'p test.txt 
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[[email protected] ~]# sed -n '/r..o/'p test.txt
rooooot:x:0:0/roooooot:/bin/bash
[[email protected] ~]# sed -n '/ooo*/'p test.txt
root:x:0:0:root:/root:/bin/bash
rooooot:x:0:0/roooooot:/bin/bash

3、-e能够达成多个人作品表现
[[email protected] ~]# sed -e '1'p -e '/111/'p -n test.txt 
rot:x:0:0:rot:/rot:/bin/bash
11111111111111111111111111111111

能够用-e写两个;-e相当于传送带,先相配最前面包车型客车打字与印刷,再合营前边的打字与印刷,所以首先行会打字与印刷2次;

[[email protected] ~]# sed -e '/root/p' -e '/bash/p' -n 1.txt
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
user1:x:500:500::/home/user1:/bin/bash
user2:x:501:501::/home/user2:/bin/bash

-e前面也能够用;分号;-n无法写到-e的末端,能够写在-e的前边或最前边;
[[email protected] ~]# sed -e '/root/p;/bash/p' -n 1.txt
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
user1:x:500:500::/home/user1:/bin/bash
user2:x:501:501::/home/user2:/bin/bash

4、删除某行也许多行

‘d’ 那一个字符正是去除的动作了,不仅可以够去除钦赐的单行以及多行,何况还足以去除相称有个别字符的行,另外还能去除从某一行一贯到文书档案末行。

示范,删除第一行;删除1-3行;删除富含root关键词的行;删除第3行到最后一行全数行;
[[email protected] ~]# sed '1'd test.txt 
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
rooooot:x:0:0/roooooot:/bin/bash
11111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
[[email protected] ~]# sed '1,3'd test.txt 
rooooot:x:0:0/roooooot:/bin/bash
11111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
[[email protected] ~]# sed '/root/'d test.txt
rot:x:0:0:rot:/rot:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
rooooot:x:0:0/roooooot:/bin/bash
11111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
[[email protected] ~]# sed '3,$'d test.txt 
rot:x:0:0:rot:/rot:/bin/bash
root:x:0:0:root:/root:/bin/bash

5、替换字符或沟通字符串

身体力行,替换第一行字母r为LX570;替换1-2行中ot为to;替换全体行中ot为to;
[[email protected] ~]# sed '1s/r/R/g' test.txt 
RRt
[[email protected]ia ~]# sed '1,2s/ot/to/g' test.txt 
rto:x:0:0:rto:/rto:/bin/bash
roto:x:0:0:roto:/roto:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
rooooot:x:0:0/roooooot:/bin/bash
11111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
[[email protected] ~]# sed 's#ot#to#g' test.txt 
rto:x:0:0:rto:/rto:/bin/bash
roto:x:0:0:roto:/roto:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
rooooto:x:0:0/roooooto:/bin/bash
11111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

与vim编辑器里面替换同样的授命格式,s代表替换,g代表全局,不加g的话只替换行的率先个;能够动用# @作为分隔符。

1s意味只替换第一行;1,3s表示第一行到第三行;不加行数的话默感觉全体行。

演示,删除文书档案中保有的数字's/[0-9]//g'  如剔除文档中享有的字母's/[a-zA-Z]//g'删除全部的数字和字母's/[0-9a-zA-Z]//g'
[[email protected] ~]# sed 's/[0-9]//g' test.txt 
rot:x:::rot:/rot:/bin/bash
root:x:::root:/root:/bin/bash
daemon:x:::daemon:/sbin:/sbin/nologin
rooooot:x::/roooooot:/bin/bash
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

亲自去做,删除文书档案中有着的字母
[[email protected] ~]# sed 's/[a-z]//g' 1.txt 
::0:0:/://
::11:0::/://
::11:0::/://
::0:0:/://
1111111111111111111111111111111

亲自去做,删除文书档案中不是葡萄牙语字母的(数字和特殊符号)
[[email protected] ~]# sed 's/[^a-z]//g' 1.txt 
rotxrotbinbash
operatorxoperatorrootsbinnologin
operatorxoperatorroootsbinnologin
rooootxroooootbinbash
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

身体力行,删除文书档案中不是数字的(斯洛伐克共和国(The Slovak Republic)语字母和特殊符号)

[[email protected] ~]# sed 's/[^0-9]//g' 1.txt 
00
110
110
00
1111111111111111111111111111111

示范,把文档中的小写字母全体沟通为大写字母 's/[a-z]/u&/g'
[[email protected] ~]# sed 's/[a-z]/u&/g' 1.txt 
ROT:X:0:0:/ROT:/BIN/BASH
OPERATOR:X:11:0:OPERATOR:/ROOT:/SBIN/NOLOGIN
OPERATOR:X:11:0:OPERATOR:/ROOOT:/SBIN/NOLOGIN
ROOOOT:X:0:0:/ROOOOOT:/BIN/BASH
1111111111111111111111111111111
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

演示,把文书档案中的大写字母全部交换为小写字母 's/[A-Z]/l&/g'

[[email protected] ~]# sed 's/[A-Z]/l&/g' 1.txt 
rot:x:0:0:/rot:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
1111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

轮换的同一时候加-n p 打字与印刷特定的行;

[[email protected] ~]# sed -n '1s/[a-z]/u&/g'p 1.txt 
ROT:X:0:0:/ROT:/BIN/BASH

6、沟通一个字符串的地点
sed -r 's/([^:] )(:.*:)([^:] $)/321/'
[^:]非冒号,不是冒号的持有字符
-r, --regexp-extended  在剧本中利用扩张正则表明式; 加r选项的意思为后边不用再加脱意 
( )括号括起来是分支的意趣,
321    是象征3交流1,前边的内容沟通到前段时间

演示,aa与ff调换;加-r选项不用加脱意符号;不加-r ( )括号左右都亟待加脱意;调换多行用最后三个;
[[email protected] ~]# cat 1.txt 
aa:bb:cc:dd:ee:ff
[[email protected] ~]# sed -r 's/(aa)(.*)(ff)/321/' 1.txt
ff:bb:cc:dd:ee:aa
[[email protected] ~]# sed 's/(aa)(.*)(ff)/321/' 1.txt 
ff:bb:cc:dd:ee:aa
[[email protected] ~]# sed -r 's/([^:] )(:.*:)([^:] $)/321/' 1.txt 
ff:bb:cc:dd:ee:aa

示范,rot与/bin/bash进行替换
[[email protected] ~]# grep 'rot' test.txt
rot:x:0:0:rot:/rot:/bin/bash
[[email protected] ~]# grep 'rot' test.txt |sed 's/(rot)(.*)(/bin/bash)/321/'
/bin/bash:x:0:0:rot:/rot:rot
[[email protected] ~]# grep 'rot' test.txt |sed -r 's/(rot)(.*)(/bin/bash)/321/'
sed:-e 表达式 #1,字符 18:“s”的未知选项
[[email protected] ~]# grep 'rot' test.txt |sed -r 's/(rot)(.*)(/bin/bash)/321/'
/bin/bash:x:0:0:rot:/rot:rot

加-r  后()内的/bin/bash 也还需求脱意才得以;

-i 选项    直接交换字符,何况保留原来的书文件里面。使用i选项前,记得备份最初的小说件。

[[email protected] ~]# sed -r -i 's/([^:] )(:.*:)([^:] $)/321/' 1.txt 
[[email protected] ~]# cat 1.txt 
ff:bb:cc:dd:ee:aa

在sed命令中引进shell变量

Linux下Shell编制程序——sed命令基本用法

Unix文本管理工科具之sed 

sed 高等用法

sed命令详解与示范

正文永恒更新链接地址:

详述 sed、awk工具得以兑现公文替换而且把替换的文本输出到显示屏上 sed和awk都是流式编辑器,是针对文书档案的行来操作的。...

bb=aa[/d /] #相称字符串中的数字
puts bb #should be output '123'

演示的文件内容,以下操作依据此文件。
[root@linuxidc ~]# cat test.txt 
rot:x:0:0:rot:/rot:/bin/bash
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
rooooot:x:0:0/roooooot:/bin/bash
11111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

 

1、打印某一行
sed -n 'n'p filename 单引号内的n是三个数字,表示第几行;p也可以写到引号内;

regexp=/d /

示例,打印passwd第3-5行;

puts aa.gsub(regexp,' ') #相配字符串中数字以外的字符

[root@linuxidc ~]# sed -n '3,5'p /etc/passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

cc=aa[/d{2}/] #相称字符串中的2个数字
puts cc #should be output '12'

打字与印刷全部行

dd=aa[/3$/] #认清字符串是不是以3结尾
puts dd #should be output '3'

[root@linuxidc ~]# sed -n '1,$'p /etc/passwd

ee=aa[/^https/] #剖断字符串是或不是以https开始
puts ee #should be output 'nil'
if ee == nil
  puts "right:string is not begin from https"
end
 
ff=aa[/:///] #正则中特别/时,后面须求加转义
puts ff #should be output '://'

打字与印刷某一行,並且要来得行号,必要和grep一齐行使;

puts gg=aa.split('://')[1][/D /] #合作://前面包车型地铁字符串
#should be output 'www.dangdang.com'

[root@localhost ~]# grep -n '.*' test.txt | sed -n '1'p
1:rrt


2、打字与印刷带有某些字符串的行

字符串需求用/ /括起来;grep中的特殊符号^ $ . * 一样适用于sed中。
[root@linuxidc ~]# sed -n '/root/'p /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

打印带有/sbin/nologin的行,/供给张开脱意;
[root@linuxidc ~]# sed -n '//sbin/nologin/'p passwd 
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

打字与印刷以d发轫的行;打字与印刷以in结尾的;打字与印刷r与o字母中间有2个随机字符的;打字与印刷带有2个o及八个o的行;
[root@linuxidc ~]# sed -n '/^d/'p test.txt 
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@linuxidc ~]# sed -n '/in$/'p test.txt 
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@linuxidc ~]# sed -n '/r..o/'p test.txt
rooooot:x:0:0/roooooot:/bin/bash
[root@linuxidc ~]# sed -n '/ooo*/'p test.txt
root:x:0:0:root:/root:/bin/bash
rooooot:x:0:0/roooooot:/bin/bash

3、-e能够兑现六人作品表现
[root@linuxidc ~]# sed -e '1'p -e '/111/'p -n test.txt 
rot:x:0:0:rot:/rot:/bin/bash
11111111111111111111111111111111

能够用-e写两个;-e相当于传送带,先相称最前方的打字与印刷,再同盟前边的打字与印刷,所以首先行会打字与印刷2次;

[root@localhost ~]# sed -e '/root/p' -e '/bash/p' -n 1.txt
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
user1:x:500:500::/home/user1:/bin/bash
user2:x:501:501::/home/user2:/bin/bash

本文由68399皇家赌场发布于最新解决方案,转载请注明出处:ruby使用正则表达式之实例1,Linux正则表达式sed

关键词: 68399皇家赌场

最火资讯