所有单词都以“Passed”开头,但我只想匹配那些以“Unique”结尾的单词。
Input:
PassedShownWeekUnique,PassedShownDayUnique,PassedFailedWeek,PassedFailedDayUnique,Passed1Week,Passed1WeekUnique
Desired output:
PassedShownWeekUnique,PassedShownDayUnique,PassedFailedDayUnique,Passed1WeekUnique
我尝试了正则表达式Passed.*
,它匹配所有内容。 Passed.*Unique
无效,有人帮忙吗?
答案 0 :(得分:2)
只需使用以下内容即可。匹配从通过,然后一切,直到唯一
Passed.*Unique
if [[ $line =~ Passed.*Unique ]]; then echo line matched $line done; fi
编辑:因为他将他的问题修改为逗号分隔的行。
line=PassedShownWeekUnique,PassedShownDayUnique,PassedFailedWeek,PassedFailedDayUnique,Passed1Week,Passed1WeekUnique
REGEX=Passed.*Unique
IFS=',';
for word in $line; do
if [[ $word =~ $REGEX ]]; then
echo matched $word
fi
done
输出:
matched PassedShownWeekUnique
matched PassedShownDayUnique
matched PassedFailedDayUnique
matched Passed1WeekUnique
答案 1 :(得分:1)
您可以使用正则表达式:
Unique$
获取以“Unique”结尾的行,或者:
^Passed.+?Unique$
获取以“Passed”开头并以“Unique”结尾的行。根据您的具体实施,您可能想要选择其中一个。
如果你有逗号分隔的输入,正如你所描述的那样:
(Passed.+?Unique),|$
这将捕获以“Passed”开头并以“Unique”结尾的单词的每个实例。您可以检查每个捕获组以打印出匹配的项目。
答案 2 :(得分:0)
您尝试使用^
和$
^ Matches the empty string at the beginning of a line; also represents the characters not in the range of a list.
$ Matches the empty string at the end of a line.
这样的事情
^Passed.*?Unique$
您可以详细了解here。