这是我的出发点。
#CHECK THISOUT
------EXAMPLE 1------ ; http://www.idontneed.com
Google ; http://www.google.com
Yahoo ; http://www.yahoo.com
------EXAMPLE 2------ ; http://idontcare.com
Ebay ; http://www.ebay.com
Amazon ; http://www.amazon.com
要匹配的模式是带有------ SOMETHING ------
的字符串所需的输出是:
#CHECK THISOUT
[------EXAMPLE 1------] Google ; http://www.google.com
[------EXAMPLE 1------] Yahoo ; http://www.yahoo.com
[------EXAMPLE 2------] Ebay ; http://www.ebay.com
[------EXAMPLE 2------] Amazon ; http://www.amazon.com
答案 0 :(得分:1)
Perl救援!
/Temp/IISExpress/
perl -ne 'if (/^(------.*------) ;.*/) { $h = $1 }
elsif ($h) { print "[$h] $_" }
else {print}' < input > output
逐行读取输入行-n
变量答案 1 :(得分:1)
sed
:
sed -e '/^------..*------/,$ {
/^\(------..*------\).*/ { s//[\1]/; h; d; }
G; s/\(.*\)\n\(\[.*\]\)/\2 \1/
}' data
说明:
s/…/…/
)。h
)。G
)之后将保留空间的内容附加到模式空间。s/…/…/
)之间的空格重新排序。如果你想要方括号和余数之间的两个空格而不是一个空格,请在第二个s/…/…/
中添加一个额外的空格。
示例输出:
#CHECK THISOUT
[------EXAMPLE 1------] Google ; http://www.google.com
[------EXAMPLE 1------] Yahoo ; http://www.yahoo.com
[------EXAMPLE 2------] Ebay ; http://www.ebay.com
[------EXAMPLE 2------] Amazon ; http://www.amazon.com
答案 2 :(得分:1)
sed用于单个行上的简单替换,即全部。对于其他任何事情你应该使用awk的清晰度,便携性,效率,简单性,增强性,稳健性等等:
awk 'match($0,/-{5}.+-{5}/,a){ v="["a[0]"] "; next } {print v $0}' file
#CHECK THISOUT
[------EXAMPLE 1------] Google ; http://www.google.com
[------EXAMPLE 1------] Yahoo ; http://www.yahoo.com
[------EXAMPLE 2------] Ebay ; http://www.ebay.com
[------EXAMPLE 2------] Amazon ; http://www.amazon.com
以上使用GNU awk为第3个arg匹配(),与其他awks一起使用:
$ awk 'match($0,/-{5}.+-{5}/){ v="["substr($0,RSTART,RLENGTH)"] "; next } {print v $0}' file
#CHECK THISOUT
[------EXAMPLE 1------] Google ; http://www.google.com
[------EXAMPLE 1------] Yahoo ; http://www.yahoo.com
[------EXAMPLE 2------] Ebay ; http://www.ebay.com
[------EXAMPLE 2------] Amazon ; http://www.amazon.com
答案 3 :(得分:0)
awk
解决方案,类似于choroba's perl one-liner。使用;
作为字段分隔符,因此有一个额外的空格
$ cat ip.txt
#CHECK THISOUT
------EXAMPLE 1------ ; http://www.idontneed.com
Google ; http://www.google.com
Yahoo ; http://www.yahoo.com
------EXAMPLE 2------ ; http://idontcare.com
Ebay ; http://www.ebay.com
Amazon ; http://www.amazon.com
$ awk -F';' '{ if(/^------.*------/){ h = $1 } else if(h){ print "[" h "] " $0 } else {print} }' ip.txt
#CHECK THISOUT
[------EXAMPLE 1------ ] Google ; http://www.google.com
[------EXAMPLE 1------ ] Yahoo ; http://www.yahoo.com
[------EXAMPLE 2------ ] Ebay ; http://www.ebay.com
[------EXAMPLE 2------ ] Amazon ; http://www.amazon.com