理解得到的题目:跨行匹配(将整篇文章当作一个长字符串),将cat和dog之间的,最长的,内容提取出来,且其中不包含high和low。
实现代码(一行perl解决):
perl -pe ' s:\n::g; s:(high|low):\n$1:;' txt1.bak | perl -ne 'print $1."\n" if /cat(.*)dog/' >success
结果保存在success文件中。
其他语言实现可能不如perl简单,这里我就不写了........
-----------------------以下是分析思路(其中有错误部分,在最后指出)
经测试跨行匹配不好实现,因为既要考虑贪婪的问题,又要考虑不匹配low和high的问题(开启贪婪就会匹配上low和high,关掉贪婪匹配到的字符串又不是最长的)。
------------------------------楼主表达的意思不太明确,我实现的是将cat和dog之间的,最长的,内容提取出来,且其中不包含high和low
所以用以下思路实现:
首先:去除文本中的所有换行符,然后将cat,high,low前加上\n,
这样就实现找到cat,并且去除了high和low之后的内容(因为要排除high和low,所以直接将其后的所有内容都舍弃{有dog也无法满足},)
然后:将cat开头 dog结尾的内容提取出来(贪婪匹配),
两行命令 :
perl -pe 's:\n::; s:cat:\ncat: