shell 正则匹配一条字符串并且获取该字符串中所有匹配到的字符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell 正则匹配一条字符串并且获取该字符串中所有匹配到的字符相关的知识,希望对你有一定的参考价值。

比如说 $a="这个一个测试1234.html,还有一个连接2333.html"
要获取到1234.html和2333.html

1、“^”是匹配以什么字符或字符串开头的,匹配正确返回1,否则返回0。

2、“$”是匹配以什么字符或字符串结尾的,匹配正确返回1,否则返回0。

3、“.”是匹配任意的单个字符,返回正确的为1,否则为0。

4、“[...]”是匹配中括号内的任意字符,如果匹配上返回1,否则返回0。

5、“[^...]”是匹配不出中括号内的任意字符,正确返回1,否则返回0。

注意事项:

shell也可以运行在另外一种模式:非交互式模式。在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,shell也就终止了。

参考技术A $ echo $a | awk -v RS=".html" 'if(length($0)>1)gsub("[^0-9]+","");print $0".html"'
1234.html
2333.html

不清楚正则匹配的条件(关键字)是什么,如有更详细的说明就更好了。

暂且只匹配了html,并且假设html的名称都是数字,而其他描述部分都是非数字。

追问

匹配到 repdetail_2121417.html类型 就是数字不一样,如repdetail_2121418.html repdetail_2131417.html

追答a="这是一个测试repdetail_2121413.html,还有一个连接repdetail_2121418.html,还有一个repdetail_2131417.html"
echo $a | awk -F"(repdetail)|(html)" '/html/for(i=2;i<NF;i+=2) print "repdetail"$i"html"'

以 repdetail 和 html 为字段分隔符,打印偶数字段并补全文件名。

追问

有没有试过,不大对!

追答

当然是先试过了才贴上。

追问

OK 谢谢~确实对的 我编码搞错了

追答

Good!

本回答被提问者采纳
参考技术B 显示内容:
$ echo "XCBNHTES1234.html,UHNGWWDD3333.html"
XCBNHTES1234.html,UHNGWWDD3333.html

选出文件名字:
$ echo "XCBNHTES1234.html,UHNGWWDD3333.html"| sed -r 's/[^1-9]*([1-9]+\.html)/\1/g'

1234.html3333.html

文件名之间加空格:

$ echo "XCBNHTES1234.html,UHNGWWDD3333.html"| sed -r 's/[^1-9]*([1-9]+\.html)/\1/g' | sed 's/html/html /g'

1234.html 3333.html

不知道你的详细需求,不知道还有什么特殊情况,仅供参考,谢谢!

以上是关于shell 正则匹配一条字符串并且获取该字符串中所有匹配到的字符的主要内容,如果未能解决你的问题,请参考以下文章

bash shell中字符串匹配正则表达式的子字符串[重复]

shell字符

求一条c# 正则表达式,来获取HTML标签的内容

shell脚本扩展

Shell正则表达式(1-3)

linux中 正则表达式和通配符的区别