匹配文件中的字符串并使用 sed 或 awk 打印整个值

Posted

技术标签:

【中文标题】匹配文件中的字符串并使用 sed 或 awk 打印整个值【英文标题】:Match a string in a file and print entire value using sed or awk 【发布时间】:2015-03-27 09:35:07 【问题描述】:

我正在尝试提取与字符串关联的值,但需要一种最佳方式。

name=sandeep login_name=sn003 version=3.0 rel_no=456....

以上文本存储在一个文件中。 我正在尝试搜索字符串的一部分,然后打印整个值。

假设我需要使用login 进行搜索,输出应该是

login_name=sn003

我试过命令

cat filename | awk -F" " 'print $2'

如果login_name 不是第二个字段,则不会打印。 如何在任何位置搜索字符串然后打印结果?

提前致谢。

【问题讨论】:

How to extract string following a pattern with GREP, REGEX or PERL的可能重复 【参考方案1】:

你可以使用 grep,

$ echo 'name=sandeep login_name=sn003 version=3.0 rel_no=456.....' | grep -o '[^ ]*login[^ ]*'
login_name=sn003

[^ ]* 匹配任何字符,但不匹配空格,零次或多次。

通过 sed,

$ echo 'name=sandeep login_name=sn003 version=3.0 rel_no=456.....' | sed 's/.*\([^ ]*login[^ ]*\).*/\1/'
login_name=sn003

通过 awk,

$ echo 'name=sandeep login_name=sn003 version=3.0 rel_no=456.....' | awk 'for(i=1;i<=NF;i++)if($i~/login/)print $i'
login_name=sn003

【讨论】:

【参考方案2】:

使用 perl:

perl -lne 'print $1 if(/(login[\S]+\s).*/)'

【讨论】:

以上是关于匹配文件中的字符串并使用 sed 或 awk 打印整个值的主要内容,如果未能解决你的问题,请参考以下文章

使用 sed 或 awk 按照匹配模式打印一行

用于搜索文本文件的一部分并打印它的通用命令(使用 awk 或 sed)

使用 sed/awk 仅打印包含匹配模式的单词 - 以 /pattern/ 开头或以 /pattern/ 结尾的单词

sed / awk 匹配文件中第二次出现的正则表达式,并替换整行

十sed 命令与正则表达式

Bash - Linux - 在一行中找到匹配并打印到SED / Awk / Grep行的末尾