Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash:Regex匹配第一次出现的字符_Regex_Linux_Bash_Awk_Sed - Fatal编程技术网

Bash:Regex匹配第一次出现的字符

Bash:Regex匹配第一次出现的字符,regex,linux,bash,awk,sed,Regex,Linux,Bash,Awk,Sed,输入: 期望输出: p45-322-16.jpg 我正在尝试用grep、awk或sed或者其他可以在bashshell上运行的东西来制作bash脚本 目前,我被以下问题困扰: p45 输出: echo "p45-322-16.jpg" | sed 's/\(.*\)-.*/\1/' 你需要限制你将要接受的东西。现在,您使用接受了太多的内容,并且默认情况下正则表达式的贪婪特性消耗了太多的字符 尝试将接受的字符限制为仅数字,或明确排除破折号: p45-322 你需要限制你将要接受的东西。现在

输入:

期望输出:

p45-322-16.jpg
我正在尝试用grep、awk或sed或者其他可以在bashshell上运行的东西来制作bash脚本

目前,我被以下问题困扰:

p45
输出:

echo "p45-322-16.jpg" | sed 's/\(.*\)-.*/\1/'

你需要限制你将要接受的东西。现在,您使用
接受了太多的内容,并且默认情况下正则表达式的贪婪特性消耗了太多的字符

尝试将接受的字符限制为仅数字,或明确排除破折号:

p45-322

你需要限制你将要接受的东西。现在,您使用
接受了太多的内容,并且默认情况下正则表达式的贪婪特性消耗了太多的字符

尝试将接受的字符限制为仅数字,或明确排除破折号:

p45-322
正则表达式的
*
部分是贪婪的,因此它尽可能地读取,以便正则表达式仍然匹配。这意味着它将声明直到最后一个
-
为止的所有内容

使用
[^-]*
匹配所有内容,直到出现
-

正则表达式的
*
部分是贪婪的,因此它尽可能地读取,以便正则表达式仍然匹配。这意味着它将声明直到最后一个
-
为止的所有内容


使用
[^-]*
匹配所有内容,直到出现
-

您可以使用
cut
命令:
echo“p45-322-16.jpg”| cut-d“--f1
您可以使用
cut
命令:
echo“p45-322-16.jpg”| cut-d“--f1
谢谢,解释得很好!谢谢,很好的解释!另一个选项是让正则表达式从破折号开始:
s/-.*/
另一个选项是让正则表达式从破折号开始:
s/-.*/
echo "p45-322-16.jpg" | sed 's/\([^-]*\).*/\1/'