我已經在多個文本文件看起來像這樣的數據:過濾多pcregrep匹配的sed
1 DAEJ X -3120041.6620 -3120042.0476 -0.3856 0.0014
Y 4084614.2137 4084614.6871 0.4734 0.0015
Z 3764026.4954 3764026.7346 0.2392 0.0014
HEIGHT 116.0088 116.6419 0.6332 0.0017 0.0017 8.0
LATITUDE 36 23 57.946407 36 23 57.940907 -0.1699 0.0013 0.0012 57.5 0.0012 62.9
LONGITUDE 127 22 28.131395 127 22 28.132160 0.0190 0.0012 0.0013 2.3 0.0013
,我想通過一個過濾器來運行它,以便輸出將是這樣的:
DAEJ: 36 23 57.940907, 127 22 28.132160, 116.6419
(?<site>\w\w\w\w+)<filler>\r\n\r\n<filler>(?<height>\-?\d+\.\d+)<filler>(?<heightRMS>\d+\.\d+)<filler>\r\n<filler>(?<lat>\-?\ *\d+\ +\d+\ +\d+\.\d+)<filler>(?<latRMS>\d+\.\d+)<filler>\r\n<filler>(?<lon>\-?\ *\d+\ +\d+\ +\d+\.\d+)<filler>(?<lonRMS>\d+\.\d+)<filler>
與repacing(:
我可以grepWin使用命名捕獲通過搜索做到這一點很容易不夠忽略未被引用的組,我會在其他實現中使用它):
$+{site}: $+{lat}, $+{lon}, $+{height}
但當然,以通過GUI手動執行操作爲代價。我想知道是否有辦法通過管道pcregrep輸出到sed進行文本替換來編寫腳本?我知道pcregrep -M
選項匹配上面的多行正則表達式模式,並且我已經成功,直到那一點,但我堅持sed
結束的問題。
我知道我可以通過'\ 9'而不是命名捕獲來使用'\ 1'的反向引用,但是我選擇後者作爲優先事項。 – alfie 2012-07-26 06:02:44
在steve下面的出色答案後,我意識到我仍然需要在LATITUDE/LONGITUDE數據行中奇怪格式化的負值情況下捕獲可能的減號,例如' - 6 29 27.798898'。 – alfie 2012-07-26 09:15:00