2.txt
AAA BBB CCC DDD
AAA BBB DDD
CCC DDD
#sed -n '/AAA/p' 2.txt |sed -n '/CCC/p'
\(\)括起来的是捕获组,你可以在后面的替换中用\1 \2 之类的来调用
.表示任意一个字符
*表示*前面出现的那个字符重复0或任意次
你写8,第一个捕获组捕获0个字符,第二个捕获组捕获一个字符
看你的需求,我想大概是判断每个url/url中priorityXXXX/priority的XXXX是否存在于list文件中。如果存在,则删除这个url/url段落。
假设你的test.xml文件的格式比较标准,每个url.../url段落内部都有4行,且其中一行是priority.../priority,必须符合这两个条件,否则要按需改代码:
那么,新建一个a.sed文件,内容如下:
01 #!/usr/bin/sed -nf
02
03 \%url%!p
04 1{s/.*/cat list.txt/e;h}
05
06 \%url%{
07 N;N;N;N;N;G;
08 \%priority(.*)/priority.*\1.*%d
09 }
10
11 s%/url.*%/url%p
再执行:
复制内容到剪贴板
代码:
sed -rn -f a.sed test.xml
以下是我的示例,list.txt文件内容如下:
复制内容到剪贴板
代码:
bbb
xxx
yyy
ccc
test.xml的内容如下:
复制内容到剪贴板
代码:
?xml version="1.0" encoding="UTF-8" standalone="no"?
url
loc;/loc
lastmod2016-10-31/lastmod
changefreqalways/changefreq
priorityaaa/priority
/url
url
loc;/loc
lastmod2015-11-18/lastmod
changefreqalways/changefreq
prioritybbb/priority
/url
url
loc;/loc
lastmod2015-11-18/lastmod
changefreqalways/changefreq
priorityccc/priority
/url
url
loc;/loc
lastmod2015-11-18/lastmod
changefreqalways/changefreq
priorityddd/priority
/url
url
loc;/loc
lastmod2015-11-18/lastmod
changefreqalways/changefreq
priorityddd/priority
/url
其中prioritybbb/priority和priorityccc/priority中的bbb、ccc存在于list文件中,所以删除这两个url....../url段,其他的保留。
执行结果为:
复制内容到剪贴板
代码:
?xml version="1.0" encoding="UTF-8" standalone="no"?
url
loc;/loc
lastmod2016-10-31/lastmod
changefreqalways/changefreq
priorityaaa/priority
/url
url
loc;/loc
lastmod2015-11-18/lastmod
changefreqalways/changefreq
priorityddd/priority
/url
url
loc;/loc
lastmod2015-11-18/lastmod
changefreqalways/changefreq
priorityddd/priority
/url
说下上面sed脚本的思路:
(1).一开始就将list.txt文件读取到pattern space空间,并保存到hold space。
(2).每读取到url的时候就继续读取后面5行,正好读到/url。
(3).读完了/url后,把hold space中的内容追加回pattern space,并从priorityXXXXXpriority开始判断后面是否还有XXXXX,如果有就直接删除pattern space,否则就将追加回pattern space的list.txt内容删除,最后输出。
(4).这样的执行方式,只需读取一次test.xml和list.txt文件,效率很高。
file:
aaaa
bbbb
cccc
bbbb
dddd
命令:
row=`sed "/bbbb/=" file | sed -n "1"p`
sed "${row}i\fulinux" file
sed 's/\old\/new/g' file
这个是匹配单词一样的东西
意思就是限制它的宽度 去掉左右两边之一就相当于放宽那边不限制
.xml的内容如下:复制内容到剪贴板代码:?xml version="1.0" encoding="UTF-8" standalone="no"?urlloc;/loclastmod2016-10-31/lastm
是否存在于list文件中。如果存在,则删除这个url/url段落。假设你的test.xml文件的格式比较标准,每个url.../url段落内部都有4行,且其中一行是priority.../priority,必须符合这两个条件,否则要按需改代码:那么,新建一个a.sed文件,内容如下:
3).读完了/url后,把hold space中的内容追加回pattern space,并从priorityXXXXXpriority开始判断后面是否还有XXXXX,如果有就直接删除pattern space,否则就将追加回pattern space的l