- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有多个文本文件中的数据,如下所示:
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>
并重新调整(忽略未引用的组,我将在其他实现中使用它):
$+{site}: $+{lat}, $+{lon}, $+{height}
当然,代价是通过 GUI 手动完成。我想知道是否有一种方法可以通过将 pcregrep 输出管道传输到 sed 来进行文本替换来编写脚本?我知道 pcregrep -M
选项可以匹配上面的多行正则表达式模式,直到那时我都成功了,但我仍然坚持使用 sed
问题结束。
最佳答案
我将使用 awk
来处理您的文本文件:
awk '$1 ~ /^[0-9]+$/ { printf "%s: ", $2 } $1 == "HEIGHT" { height = $3 } $1 == "LATITUDE" { printf "%s %s %s, ", $2, $3, $4 } $1 == "LONGITUDE" { printf "%s %s %s, %s\n", $5, $6, $7, height }' file.txt
为了便于阅读,分成多行:
$1 ~ /^[0-9]+$/ {
printf "%s: ", $2
}
$1 == "HEIGHT" {
height = $3
}
$1 == "LATITUDE" {
printf "%s %s %s, ", $2, $3, $4
}
$1 == "LONGITUDE" {
printf "%s %s %s, %s\n", $5, $6, $7, height
}
结果:
DAEJ: 36 23 57.946407, 127 22 28.132160, 116.6419
编辑:
将以下代码放入名为 script.awk
的文件中:
$3 == "X" {
printf "%s: ", $2
}
$1 == "HEIGHT" {
height = $3
}
$1 == "LATITUDE" {
if ($2 == "-" && $6 == "-") { printf "-%s %s %s, ", $7, $8, $9 }
else if ($2 == "-") { printf "%s %s %s, ", $6, $7, $8 }
else if ($5 == "-") { printf "-%s %s %s, ", $6, $7, $8 }
else { printf "%s %s %s, ", $5, $6, $7 }
}
$1 == "LONGITUDE" {
if ($2 == "-" && $6 == "-") { printf "-%s %s %s, %s\n", $7, $8, $9, height }
else if ($2 == "-") { printf "%s %s %s, %s\n", $6, $7, $8, height }
else if ($5 == "-") { printf "-%s %s %s, %s\n", $6, $7, $8, height }
else { printf "%s %s %s, %s\n", $5, $6, $7, height }
}
像这样运行:
awk -f script.awk file.txt
关于regex - 使用 sed 过滤多行 pcregrep 匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11663185/
我有很多格式如下的文件: SIMPLE { residualControl { p 1e-4; U
我正在使用 pcregrep 搜索多行模式,我只希望 pcregrep 搜索具有特定文件扩展名的文件,即 pcregrep -Mrl --include=*.sv -e '' /path/to/sea
pcregrep 中的 -oX 选项有问题。指定多个具有不同编号的此类选项仅输出最后指定的捕获组。 数据: docker | awk '{print $1}' |尾-n +2 | xargs dock
我在文本文件中有以下模式。 ###################### # ADD=123 New Comment ###################### if ($ADD==123) 除此之
pcregrep 中是否有任何选项允许我只打印一次匹配的字符串模式?我开始了解选项--match-limit。但 pcregrep 不识别此选项。是否有任何特定版本支持此选项。 我假设 --match
这是我在这里的第一篇文章,这是个好地方,对我帮助很大! 所以我正在使用 pcregrep,我想用我的 pattens 捕获文件。我正在为正则表达式使用变量,例如: test="'.', ){20,}.
我试图从 pcregrep 的搜索结果中排除多个目录: pcregrep --exclude_dir=^\./(foo/abc|bar/cde)$ --recursive --regex alpha
我在日志文件中有 xml,看起来像: 1 text text text 2 text 所以,我需要从日志文件中删除这个 XML,我正在尝试这样做: pcregrep -M '(\n|.)*'
我正在尝试使用 pcregrep -M 来搜索多行字符串。 这是我脚本中的一行: lineNumber=$(pcregrep -Mn '$firstLine.*\n.*$secondLine.*' $
我正在尝试使用 this SO question 的最佳答案中指定的 pcregrep在 Cygwin 上。我的环境是运行 Cygwin V 1.7.20(0.266/5/3) 的 Win7 64 位
我编写了一个简单的正则表达式,与 pcregrep 一起使用以返回摆动文件中的给定染色体(见下文)。 pcregrep -M '^fixedStep chrom=2.*\n[0-9\n]*' inp
我需要在新的 macOS 上找到所有事件的网络接口(interface)。这意味着以下带有 pcregrep 的单行代码将不起作用: ifconfig | pcregrep -M -o '^[^\t:
我有多个文本文件中的数据,如下所示: 1 DAEJ X -3120041.6620 -3120042.0476 -0.3856
我需要在新的 macOS 上找到所有事件的网络接口(interface)。这意味着以下带有 pcregrep 的单行代码将不起作用: ifconfig | pcregrep -M -o '^[^\t:
我需要抓取最后一次匹配ENTRY之后的内容到文件末尾,我好像做不到。它可以是多行,数据可以包括文件末尾的任何字符,包括 (,\n, )。 我试过: tail -1 file # doesn’t wor
我有一个与 pcregrep 完美配合的正则表达式: pcregrep -M '([a-zA-Z0-9_&*]+)(\(+)([a-zA-Z0-9_ &\*]+)(\)+)(\n)(\{)' 现在我尝
我有这个文本文件 AAAA 1234 title example Lorem Ipsum FF AAAA 1234 title example €330 - Roma FF 我只想从此文件中提取以下文
我正在尝试在 Ubuntu 上安装 PCRE-8.35。我的问题类似于 this guy's 。我正在遵循相同的教程,但我的问题源于他的命令。当我尝试安装时,我收到此错误消息:** 无法 --enab
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
我是一名优秀的程序员,十分优秀!