首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于grep或awk的模式匹配

基于grep或awk的模式匹配
EN

Stack Overflow用户
提问于 2015-07-12 05:56:04
回答 3查看 155关注 0票数 1

考虑到以下一行案文:

代码语言:javascript
复制
abc/xyz-ibl.txt-234-   "simple", /* col */

如何使用正则表达式从上述文本中提取xyz-ibl.txtsimple。文件名可以是任何东西,但是它总是有.txt的扩展,simple也可以是任何东西,但是后面总是有, /* col */

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-12 06:22:02

这将为您获得文件名:

代码语言:javascript
复制
grep -oP "\b[^/]*\.txt"

这会让你得到simple

代码语言:javascript
复制
grep -oP '(?<=")[^"]*(?="\s*,\s*/\*\s*col\s*\*/)'

这会让你们两人:

代码语言:javascript
复制
grep -oP '\b[^/]*\.txt|(?<=")[^"]*(?="\s*,\s*/\*\s*col\s*\*/)'

示例:

代码语言:javascript
复制
s='abc/xyz-ibl.txt-234-   "simple", /* col */'
echo "$s" |grep -oP "\b[^/]*\.txt"
echo "$s" |grep -oP '(?<=")[^"]*(?="\s*,\s*/\*\s*col\s*\*/)'

输出:

代码语言:javascript
复制
xyz-ibl.txt
simple

注意:-P用于Perl。

编辑:

根据您的评论,如果您想要提取它们,如果它们都匹配,那么最好使用sed而不是grep

在扩展正则表达式中使用sed

代码语言:javascript
复制
echo "$s" |sed -nr 's#.*/(\b[^/]+\.txt).*"([^"]*)*"\s*,\s*/\*\s*col\s*\*/#\1\n\2#p'

使用基本正则表达式:

代码语言:javascript
复制
echo "$s" |sed -n 's#.*/\([^/]*\.txt\).*"\([^"]*\)*"[[:space:]]*,[[:space:]]*/\*[[:space:]]*col[[:space:]]*\*/#\1\n\2#p'
票数 1
EN

Stack Overflow用户

发布于 2015-07-12 06:25:17

若要返回仅包含字符串,请将awk-F一起使用,然后将OFS传递到grep反转:

代码语言:javascript
复制
awk -F'/|.txt|"' 'BEGIN { OFS = ".txt" } { print $2," "$4} | grep -v ','

结果:

代码语言:javascript
复制
xyz-ibl.txt simple
票数 0
EN

Stack Overflow用户

发布于 2015-07-12 07:57:08

以下是使用awk的解决方案

代码语言:javascript
复制
awk '{ match ($0, /\/([^.]+)(.txt)-.*"([^"]+)"/, fields); printf("%s%s %s\n", fields[1], fields[2], fields[3]); }'

以上不考虑C风格的评论在结尾。以下是事实。

代码语言:javascript
复制
awk '{ match ($0, /\/([^.]+)(.txt)-.*"([^"]+)", \/\* col \*\//, fields); printf("%s%s %s\n", fields[1], fields[2], fields[3]); }'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31364844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档