【发布时间】:2016-05-09 16:42:26
【问题描述】:
输入:
p45-322-16.jpg
期望的输出:
p45
我正在尝试使用 grep 或 awk 或 sed 或可以在 bash shell 上运行的东西制作一个 bash 脚本。
目前我对此感到困惑:
echo "p45-322-16.jpg" | sed 's/\(.*\)-.*/\1/'
输出:
p45-322
【问题讨论】:
输入:
p45-322-16.jpg
期望的输出:
p45
我正在尝试使用 grep 或 awk 或 sed 或可以在 bash shell 上运行的东西制作一个 bash 脚本。
目前我对此感到困惑:
echo "p45-322-16.jpg" | sed 's/\(.*\)-.*/\1/'
输出:
p45-322
【问题讨论】:
您可以使用cut 命令:echo "p45-322-16.jpg" | cut -d"-" -f1
【讨论】:
您需要限制您将接受的内容。现在,您使用. 接受了太多,而正则表达式的默认贪婪特性消耗了太多字符。
尝试将接受的字符限制为仅数字,或明确排除破折号:
\([0-9]*\).*
\([^-]*\).*
【讨论】:
s/-.*//
echo "p45-322-16.jpg" | sed 's/\([^-]*\).*/\1/'
你的正则表达式的.* 部分是贪婪的,所以它尽可能地读取,以便正则表达式仍然匹配。这意味着它声明了直到最后一个 - 的所有内容。
使用[^-]* 匹配所有内容,直到-。
【讨论】: