问题描述
在单词的第一个匹配项之后,如何更改正则表达式以使其停止?
我的文字是:
-rwxr--r-- 1 bob123 bob123 0 Nov 10 22:48 /path/for/bob123/dir/to/file.txt
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
。