首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何提取以该字符串或该字符串开头的行?

如何提取以该字符串或该字符串开头的行?
EN

Stack Overflow用户
提问于 2022-10-09 10:48:12
回答 2查看 44关注 0票数 -1

新手UNIX用户问题..。

输入文件(location.txt)如下:

代码语言:javascript
复制
WGS_LAT deg 12
WGS_LAT min 30
WGS_LAT sec 05
WGS_LAT hsec    29
WGS_LAT northSouth  North
WGS_DLAT    decimalDegreesLatitude  12.501469
WGS_LONG    deg 07
WGS_LONG    min 00
WGS_LONG    sec 05
WGS_LONG    hsec    61
WGS_LONG    eastWest    West
WGS_DLONG   decimalDegreesLongitude -70.015606

我想得到所有以WGS_LATWGS_DLAT开头的行。

首先,grep是您推荐的这个工作的工具吗?

第二,如果是的话,那么如何表达模式呢?所有这些都失败了:

代码语言:javascript
复制
grep ^WGS_LAT|^WGS_DLAT location.txt
grep ^(WGS_LAT|WGS_DLAT) location.txt
grep ^WGS_D?LAT location.txt

请问正确的图案是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-10-09 11:10:49

首先,您应该始终引用正则表达式,以保护它们不受shell的影响。例如,|在shell中具有特殊意义,它是管道操作符,它允许您将一个程序的输出作为输入传递给另一个程序。因此,未引用的grep ^WGS_LAT|^WGS_DLAT location.txt被解释为“运行grep ^WGS_LAT并将其输出作为输入传递给^WGS_DLAT location.txt

接下来,grep默认使用基本正则表达式,为了使|表示OR,您需要将其转义为\|,或者使用-E (如果您使用的是启用PCRE的GNUgrep)来启用扩展正则表达式。所以所有这些都适用于你:

代码语言:javascript
复制
grep -E '^WGS_LAT|^WGS_DLAT' location.txt
grep -E '^(WGS_LAT|WGS_DLAT)' location.txt
grep '^WGS_LAT\|^WGS_DLAT' location.txt

或者,更简单地说,grep用于以WGS_开头的行和一个可选的D,后面跟着LAT

代码语言:javascript
复制
grep -E '^WGS_D?LAT' location.txt
票数 1
EN

Stack Overflow用户

发布于 2022-10-09 11:09:04

Grep可以处理两种类型的正则表达式:

  • 使用grep PATTERN file调用的基本正则表达式(BRE)
  • 使用grep -E PATTERN file调用的扩展正则表达式(ERE)

因此,在默认情况下,grep使用BRE。

当阅读grep的手册页时,您会发现

Basic表达式与扩展正则表达式在基本正则表达式中元字符?+{|()失去了特殊意义;相反,请使用反斜杠版本\?\+\{\|\(\)

因此,就你的情况而言,答案是:

代码语言:javascript
复制
$ grep "^\(WGS_LAT\|WGS_DLAT \)" location.txt
$ grep -E "^(WGS_LAT|WGS_DLAT)" location.txt
$ grep "^WGS_D\?LAT" location.txt
$ grep -E "^WGS_D?LAT" location.txt
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74004080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档