gpt4 book ai didi

linux - 每行提取第一个实例(也许是grep?)

转载 作者:太空宇宙 更新时间:2023-11-04 09:23:55 32 4
gpt4 key购买 nike

我想在 Linux 中每行提取字符串的第一个实例。我目前正在尝试 grep 但它每行产生所有实例。下面我想要“tn =”之后的字符串(数字和字母)......但每行只有第一组。实际字符可以是数字或字母的任意组合。他们后面有一个空格。 tn=

前还有一个空格

给定以下文件:

hello my name is dog tn=12g3 fun 23k3 hello tn=1d3i9 cheese 234kd dks2 tn=6k4k ksk

1263 chairs are good tn=k38493kd cars run vroom it95958 tn=k22djd fair gold tn=293838 tounge

期望的输出:

12g3

k38493

最佳答案

如果您有 GNU grep,这里有一种方法可以做到这一点,它(主要)支持带有 -P 的 Perl 兼容正则表达式。此外,非标准开关 -o 用于仅打印与模式匹配的部分,而不是整行:

grep -Po '^.*?tn=\K\S+' file

模式匹配 ^ 行的开头,后跟任何字符 .*?,其中 ? 使匹配非-贪婪的。在 tn= 的第一场比赛之后,\K“杀死”了前面的部分,所以您只剩下您感兴趣的部分:一个或多个非空格字符 \S+.

Ed's answer ,您可能希望在 tn 之前添加一个空格,以避免意外匹配 footn=... 之类的内容。您可能还喜欢使用 \w 之类的东西来匹配“单词”字符(相当于 [[:alnum:]_])。

关于linux - 每行提取第一个实例(也许是grep?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38832643/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com