grep 用于文件中的部分字符串

Posted

技术标签:

【中文标题】grep 用于文件中的部分字符串【英文标题】:grep for a partial string, within a file 【发布时间】:2020-05-11 01:58:48 【问题描述】:

我需要在一个纯文本文件中找到爱达荷州邮政缩写的所有实例,这些实例前面正好是四个字符,后面是任意数量的字符。显然,通配符不起作用,但这是我正在寻找的:

??????ID*

我知道我应该知道这一点,但我就是不明白。

这些都不起作用:

grep "[0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z]ID" filename
grep '^[0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][I][D]*' filename
grep '^[0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][I][D]$' filename
grep ....ID* filename
grep "....ID*" filename

我忘记了什么?

'root' 请求的示例输入和所需的输出。我很抱歉没有尽快包括在内:

输入:

servername HDKSIDJIELSJ more stuff
servername LKAIIDKEJAHHLL more stuff
servername SLKERILELLWELKM more stuff
servername WOIERISLKJD more stuff
servername LQOEIDLKJV more stuff
servername POCEIDLKEKJSH more stuff
servername SLKENCLEISJEHJ more stuff
servername LSKESCIEHAL more stuff

输出:

servername HDKSIDJIELSJ more stuff
servername LKAIIDKEJAHHLL more stuff
servername LQOEIDLKJV more stuff
servername POCEIDLKEKJSH more stuff

【问题讨论】:

试试grep '^....ID' 请添加示例输入和所需的输出。 root,我已经添加了请求的输入和输出。 更正了条目。我在数据条目中遗漏了“服务器名称”字段。 我的回答有帮助吗? 【参考方案1】:

您似乎提取了前 4 个字母数字字符,然后从行首提取了 ID

使用

grep -o '^[[:alnum:]]\4\ID' filename

见online grep demo:

s="12ABID More text...
MNDFID another line...
Nothing here";
grep -o '^[[:alnum:]]\4\ID' <<< "$s";

输出:

12ABID
MNDFID

这里,-o 使 grep 只输出匹配的子字符串,并且 POSIX BRE 模式匹配

^ - 字符串开头 [[:alnum:]]\4\ - 四个字母数字字符 ID - ID 子字符串

【讨论】:

以上是关于grep 用于文件中的部分字符串的主要内容,如果未能解决你的问题,请参考以下文章

用于字符串的 grep 文件并将目录复制到另一个目录

linux命令之——grep详解

Linux查找字符串命令grep(转)

linux正则表达式

Linux命令过滤文本 grep

grep命令详解