当前位置: 技术问答>linux和unix
shell多行匹配如何实现
来源: 互联网 发布时间:2016-09-09
本文导语: 模式匹配多行怎么实现? 模式匹配多行怎么实现? 现在假如有这样一个文件test.txt: BEGIN HEADER CharacterSet "CP936" ExportingTool "Ascential DataStage Export" ToolVersion "4" ServerName "10.102.9.74" ToolInstanceID "SPDBODS" ...
模式匹配多行怎么实现?
模式匹配多行怎么实现?
现在假如有这样一个文件test.txt:
BEGIN HEADER
CharacterSet "CP936"
ExportingTool "Ascential DataStage Export"
ToolVersion "4"
ServerName "10.102.9.74"
ToolInstanceID "SPDBODS"
MDISVersion "1.0"
Date "2008-03-27"
Time "09.08.30"
ServerVersion "7.5.2"
END HEADER
BEGIN DSJOB
Identifier "DS_DSK_HIS_TBCURRENTS"
DateModified "2008-02-29"
TimeModified "15.32.04"
BEGIN DSRECORD
Identifier "ROOT"
DateModified "1899-12-30"
TimeModified "00.00.01"
OLEType "CJobDefn"
Readonly "0"
Name "DS_DSK_HIS_TBCURRENTS"
...
我要截取以“BEGIN HEADER”开头,以“END HEADER”结尾的这部分内容,这模式匹配该怎么实现?
还有可能有多个其他的END HEADER,我只找到最近的那个,就是惰性查找怎么实现?
我写的bash脚本用grep可以实现么?grep -P 。。。。。求大家指点一下啊
模式匹配多行怎么实现?
现在假如有这样一个文件test.txt:
BEGIN HEADER
CharacterSet "CP936"
ExportingTool "Ascential DataStage Export"
ToolVersion "4"
ServerName "10.102.9.74"
ToolInstanceID "SPDBODS"
MDISVersion "1.0"
Date "2008-03-27"
Time "09.08.30"
ServerVersion "7.5.2"
END HEADER
BEGIN DSJOB
Identifier "DS_DSK_HIS_TBCURRENTS"
DateModified "2008-02-29"
TimeModified "15.32.04"
BEGIN DSRECORD
Identifier "ROOT"
DateModified "1899-12-30"
TimeModified "00.00.01"
OLEType "CJobDefn"
Readonly "0"
Name "DS_DSK_HIS_TBCURRENTS"
...
我要截取以“BEGIN HEADER”开头,以“END HEADER”结尾的这部分内容,这模式匹配该怎么实现?
还有可能有多个其他的END HEADER,我只找到最近的那个,就是惰性查找怎么实现?
我写的bash脚本用grep可以实现么?grep -P 。。。。。求大家指点一下啊
|
sed -n '/BEGIN HEADER/,/END HEADER/p' result.dat
|
如果有很多这样的段,那就以这段里的关键字来查找啦