正则表达式与大写匹配与排除

时间:2016-05-22 18:52:52

标签: regex bash grep

我试图针对以下情况提出正则表达式:我需要使用grep找到以下路径的任何匹配路径:

  • 包括所有大写匹配路径。 例如:

    COM /富/酒吧/ 1.2.3-SNAPSHOT /酒吧-1,2,3- SNAPSHOT.jar

    请注意B中的大写Bar

  • 排除仅包含SNAPSHOT并且没有其他大写字母的所有大写匹配路径。 例如:

    COM /富/酒吧/ 1.2.3-SNAPSHOT /酒吧-1,2,3- SNAPSHOT.jar

这可以用grep吗?

4 个答案:

答案 0 :(得分:5)

这样的事情可能会:

grep -vE '^([^[:upper:]]*(SNAPSHOT)?)*$'

故障:

-v将反转匹配(显示所有不匹配的行。-E启用扩展正则表达式。

^                             # Start of line
 (                        )*  # Capturing group repeated zero or more times
  [^[:upper:]]*               # Match all but uppercase zero or more times
               (SNAPSHOT)?    # Followed by literal SNAPSHOT zero or one time
                            $ # End of line

答案 1 :(得分:1)

如果您只想获取匹配的文件。我会这样做。

find . -type f -regex '.*[A-Z].*' | while read -r line; do echo "$line" | sed 's/SNAPSHOT//g' | grep -q '.*[A-Z].*' && echo "$line"; done

答案 2 :(得分:1)

只需使用awk:

function getDataForTable($event: any) {
  $event.target.classList.add('active');
  // get data for table since we are opening the div to show the body
}

使用GNU awk或mawk for gensub():

$ cat file
com/foo/Bar/1.2.3-SNAPSHOT/Bar-1.2.3-SNAPSHOT.jar
com/foo/bar/1.2.3-SNAPSHOT/bar-1.2.3-SNAPSHOT.jar

其他问题:

$ awk 'gensub(/SNAPSHOT/,"","g")~/[[:upper:]]/' file
com/foo/Bar/1.2.3-SNAPSHOT/Bar-1.2.3-SNAPSHOT.jar

答案 3 :(得分:1)

嗯,您需要limit列出所有路径。然后你可以用find进行两次运行。一个包括所有资本案例。另一个不包括除grep以外的没有大写字母:

SNAPSHOT

我认为只有最后一个grep需要一些解释:

  • find . | grep '[A-Z]' | grep -v '.*\/[^A-Z]*SNAPSHOT[^A-Z]*$' 排除匹配行
  • grep -v 贪婪匹配第一个斜杠的所有内容。由于.*\/
  • ,总会有一个斜杠
  • find .查找非大写字母的所有字符。所以我们在SNAPSHOT文字之前和之后应用它,直到字符串的结尾。

Here你可以在线玩它。