0

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

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

Desired output:
PassedShownWeekUnique,PassedShownDayUnique,PassedFailedDayUnique,Passed1WeekUnique

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

4

3 回答 3

2

只需使用以下内容。匹配从通过,然后是一切,直到唯一

Passed.*Unique

if [[ $line =~ Passed.*Unique ]]; then echo line matched $line done; fi

编辑:由于 op 将他的问题修改为逗号分隔行。

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
于 2013-06-11T20:07:26.397 回答
1

您可以使用正则表达式:

Unique$

获取以单词“Unique”结尾的行,或者:

^Passed.+?Unique$

获取以“Passed”开头并以“Unique”结尾的行。根据您的具体实施,您可能需要选择其中一个。


如果您有逗号分隔的输入,如您所述:

(Passed.+?Unique),|$

这将捕获以“Passed”开头并以“Unique”结尾的单词的每个实例。您可以检查每个捕获组以打印出它匹配的项目。

于 2013-06-11T20:10:00.190 回答
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$

你可以在这里阅读更多关于它的信息。

于 2013-06-11T20:10:35.903 回答