我有多个文本文件,其格式如下:
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
我可以使用grepWin和命名捕获来轻松完成,只需搜索:
(?<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>
并用(replacing with)(忽略未引用的组,我将在其他实现中使用它):
$+{site}: $+{lat}, $+{lon}, $+{height}
当然,您可以通过手动操作GUI来完成,但这需要付出一定的代价。我想知道是否有一种方法可以通过将pcregrep输出管道传输到sed进行文本替换的方式进行脚本编写?我了解
pcregrep -M
选项以匹配上面的多行正则表达式模式,并且在此之前已经成功实现,但我卡在了sed
的问题上。
\1
到\9
的反向引用,而不是命名捕获,但出于个人偏好,我选择了后者。 - alfie