正则表达式匹配逗号分隔行中的字符串UNTIL字符串

时间:2013-06-11 20:03:40

标签: regex

所有单词都以“Passed”开头,但我只想匹配那些以“Unique”结尾的单词。

Input:
PassedShownWeekUnique,PassedShownDayUnique,PassedFailedWeek,PassedFailedDayUnique,Passed1Week,Passed1WeekUnique

Desired output:
PassedShownWeekUnique,PassedShownDayUnique,PassedFailedDayUnique,Passed1WeekUnique

我尝试了正则表达式Passed.*,它匹配所有内容。 Passed.*Unique无效,有人帮忙吗?

3 个答案:

答案 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