我试图针对以下情况提出正则表达式:我需要使用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
吗?
答案 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你可以在线玩它。