使用正则表达式过滤 S3 上以 _$folder$ 结尾的占位文件的方法

2024-03-01 0 426
目录
  • Shell 实现
  • Java 实现
  • 正则表达式文本过滤
    • grep文本过滤
    • 正则表达式
    • 正则表达式和通配符的区别
    • 匹配字符串问题
    • 基本正则和扩展正则的区别

当我们使用命令行批量从 S3 上拷贝文件或统计文件数量时,希望能排除掉 S3 上以 _$folder$ 结尾的占位文件,这个正则表达式应该怎么写呢?

Shell 实现

以下是统计 S3 某个位置下的除 _$folder$ 结尾的文件的文件数量:

aws s3 ls –recursive s3://my-s3-location/ | grep -v \’.*_\\$folder\\$\’ | wc -l

使用 grep 过滤是比较简单的,因为 grep 有一个 -v,–invert-match 参数:“反向匹配”,即:过滤掉match 上的行。

Java 实现

相较而言,如果是 java 程序,这个正则就很有些难写了,应为 java 正则接口并没有“反向匹配”这种设置,这个 正则要这样写:^(?!.*[_]\\$folder\\$$).*$,我们以 s3-dist-cp 这个命令为例,它的 –srcPattern 参数就是一个 Java 的正则表达式,用于匹配需要拷贝的文件,如果我们要在拷贝时排除掉 S3 上那些恼人的 _$folder$ 结尾的文件,应该这样写:

nohup s3-dist-cp \\
-Dmapreduce.job.reduces=599 \\
–src=s3://my-hbase-snapshots/usertable-20231205 \\
–dest=hdfs://${SINK_CLUSTER_NAMENODES}:8020/user/hbase/ \\
–srcPattern=\’^(?!.*[_]\\$folder\\$$).*$\’ \\
–multipartUploadChunkSize=1024 &> s3-dist-cp.out &
tail -f s3-dist-cp.out

补充:

正则表达式文本过滤

grep文本过滤

1.grep 默认是按照以行为基本单位进行匹配和显示的。

2.grep默认匹配只要包含模式字符即可

grep -w 是按单词匹配,和普通的匹配不一致

单词的分隔符, 数字加字母加下划线都算做单词的一部分

使用正则表达式过滤 S3 上以 _$folder$ 结尾的占位文件的方法

grep -f p.txt /etc/passwd

匹配显示结果的行号

使用正则表达式过滤 S3 上以 _$folder$ 结尾的占位文件的方法

使用正则表达式过滤 S3 上以 _$folder$ 结尾的占位文件的方法

grep 并且关系和 或者关系

1.并且 grep root /etc/passwd | grep shutdown

2.或者 grep -e root -e shutdown /etc/passwd

正则表达式

1.字符匹配

. 表示一个任意字符 .放在[]里面就表示.本身这个字符

2.匹配次数

某一个字符出现的次数

* 表示*号前面的字符出现的次数是不确定的

3.位置锚定

行首 ^ 不能匹配中间某段字符串的开始

行尾 $ 不能匹配中间某一段字符串的结尾

单词词首 \\<root root处于单词的最左侧

单词词尾 root\\> root处于单词的最右侧

4.分组

1. echo wangwangwangggww | grep "\\(wang\\)\\{3\\}"

2.后向引用

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

正则表达式匹配的是文件的内容或者标准输出的字符串,通配符匹配的是文件的名称.两者操作的对象不一致.

使用正则表达式过滤 S3 上以 _$folder$ 结尾的占位文件的方法

匹配字符串问题

shell执行命令的时候,正则表达式是以整个输出作为字符串内容,包括看不到的空格符号。

有些命令结果会输出一个或者多个空格,有些命令不会输出空格.

使用正则表达式过滤 S3 上以 _$folder$ 结尾的占位文件的方法

使用正则表达式过滤 S3 上以 _$folder$ 结尾的占位文件的方法

使用正则表达式过滤 S3 上以 _$folder$ 结尾的占位文件的方法

1.在表达式中()符号前面和{}括号前面都必须要加上\\(\\) 和 \\{\\}.

grep "^\\(.*\\):.*\\1$" /etc/passwd

2.正则表达式默认从字符串的最前面开始查找,但是如果锚定的是行尾,那么正则会从尾部开始查找

1.从尾部开始查找

使用正则表达式过滤 S3 上以 _$folder$ 结尾的占位文件的方法

2.从头部开始查找

使用正则表达式过滤 S3 上以 _$folder$ 结尾的占位文件的方法

3.分组实例

使用正则表达式过滤 S3 上以 _$folder$ 结尾的占位文件的方法

使用正则表达式过滤 S3 上以 _$folder$ 结尾的占位文件的方法

第一分组匹配到的字符串是7,最后面的[0-9]*\\1 表示匹配到以7结尾而且7前面可以包含任意个数字的数字

使用正则表达式过滤 S3 上以 _$folder$ 结尾的占位文件的方法

基本正则和扩展正则的区别

1.基本正则语法 小括号和大括号前面需要加上\\符号做转义

grep -w "[0-9]\\{2,3\\}" /etc/passwd

2.扩展正则 小括号和大括号前面不要加上转义字符

grep -Ew "[0-9]{2,3}" /etc/passwd

egrep -w "[0-9]{2,3}" /etc/passwd

到此这篇关于正则表达式:过滤 S3 上以 _$folder$ 结尾的占位文件的文章就介绍到这了,更多相关正则表达式过滤占位文件内容请搜索悠久资源网以前的文章或继续浏览下面的相关文章希望大家以后多多支持悠久资源网!

您可能感兴趣的文章:

  • Python使用正则表达式去除(过滤)HTML标签提取文字功能
  • 利用Python正则表达式过滤敏感词的方法
  • 详解Android过滤emoji表情正则表达式
  • PHP使用正则表达式实现过滤非法字符串功能示例
  • Python使用正则表达式过滤或替换HTML标签的方法详解
  • C#使用正则表达式过滤html标签
  • JS使用正则表达式过滤多个词语并替换为相同长度星号的方法
  • javascript用正则表达式过滤空格的实现代码
  • MYSQL使用正则表达式过滤数据
  • Java正则表达式过滤出字母、数字和中文

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 正则表达式 使用正则表达式过滤 S3 上以 _$folder$ 结尾的占位文件的方法 https://www.u-9.cn/biancheng/zhengze/181226.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务