正则表达式停在一个单词的第一次出现

问题描述

在单词的第一个匹配项之后,如何更改正则表达式以使其停止?

我的文字是:

-rwxr--r-- 1 bob123 bob123 0 Nov 10 22:48 /path/for/bob123/dir/to/file.txt

一个名为owner的变量,它是cmd中的第一个参数:

owner=$1

我的正则表达式为:^.*${owner}

我的比赛最终是:

-rwxr--r-- 1 bob123 bob123 0 Nov 10 22:48 /path/for/bob123

但是我只希望它是:-rwxr--r-- 1 bob123

解决方法

通过添加问号:^.*?${owner}。这将使*量词不贪心。但是请使用-P选项:grep -P使用与Perl兼容的正则表达式。

https://regex101.com/r/ThGpcq/1

,

这里不需要正则表达式,请使用字符串操作和串联:

text='-rwxr--r-- 1 bob123 bob123 0 Nov 10 22:48 /path/for/bob123/dir/to/file.txt'
owner='bob123'
echo "${text%%$owner*}$owner"
# => -rwxr--r-- 1 bob123

请参见online Bash demo

${text%%$owner*}从字符串的末尾(由于%%)直到(包括)$owner,以及-自$owner文本以来,删除了尽可能多的文本。已被删除-"...$owner"添加了$owner