使用正則表達(dá)式過濾 S3 上以 _$folder$ 結(jié)尾的占位文件的方法
當(dāng)我們使用命令行批量從 S3 上拷貝文件或統(tǒng)計(jì)文件數(shù)量時(shí),希望能排除掉 S3 上以 _$folder$
結(jié)尾的占位文件,這個(gè)正則表達(dá)式應(yīng)該怎么寫呢?
Shell 實(shí)現(xiàn)
以下是統(tǒng)計(jì) S3 某個(gè)位置下的除 _$folder$
結(jié)尾的文件的文件數(shù)量:
aws s3 ls --recursive s3://my-s3-location/ | grep -v '.*_\$folder\$' | wc -l
使用 grep 過濾是比較簡(jiǎn)單的,因?yàn)?grep 有一個(gè) -v,--invert-match
參數(shù):“反向匹配”,即:過濾掉match 上的行。
Java 實(shí)現(xiàn)
相較而言,如果是 java 程序,這個(gè)正則就很有些難寫了,應(yīng)為 java 正則接口并沒有“反向匹配”這種設(shè)置,這個(gè) 正則要這樣寫:^(?!.*[_]\$folder\$$).*$
,我們以 s3-dist-cp
這個(gè)命令為例,它的 --srcPattern
參數(shù)就是一個(gè) Java 的正則表達(dá)式,用于匹配需要拷貝的文件,如果我們要在拷貝時(shí)排除掉 S3 上那些惱人的 _$folder$
結(jié)尾的文件,應(yīng)該這樣寫:
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
補(bǔ)充:
正則表達(dá)式文本過濾
grep文本過濾
1.grep 默認(rèn)是按照以行為基本單位進(jìn)行匹配和顯示的。
2.grep默認(rèn)匹配只要包含模式字符即可
grep -w 是按單詞匹配,和普通的匹配不一致
單詞的分隔符, 數(shù)字加字母加下劃線都算做單詞的一部分
grep -f p.txt /etc/passwd
匹配顯示結(jié)果的行號(hào)
grep 并且關(guān)系和 或者關(guān)系
1.并且 grep root /etc/passwd | grep shutdown
2.或者 grep -e root -e shutdown /etc/passwd
正則表達(dá)式
1.字符匹配
. 表示一個(gè)任意字符 .放在[]里面就表示.本身這個(gè)字符
2.匹配次數(shù)
某一個(gè)字符出現(xiàn)的次數(shù)
* 表示*號(hào)前面的字符出現(xiàn)的次數(shù)是不確定的
3.位置錨定
行首 ^ 不能匹配中間某段字符串的開始
行尾 $ 不能匹配中間某一段字符串的結(jié)尾
單詞詞首 \<root root處于單詞的最左側(cè)
單詞詞尾 root\> root處于單詞的最右側(cè)
4.分組
1. echo wangwangwangggww | grep "\(wang\)\{3\}"
2.后向引用
正則表達(dá)式和通配符的區(qū)別
正則表達(dá)式匹配的是文件的內(nèi)容或者標(biāo)準(zhǔn)輸出的字符串,通配符匹配的是文件的名稱.兩者操作的對(duì)象不一致.
匹配字符串問題
shell執(zhí)行命令的時(shí)候,正則表達(dá)式是以整個(gè)輸出作為字符串內(nèi)容,包括看不到的空格符號(hào)。
有些命令結(jié)果會(huì)輸出一個(gè)或者多個(gè)空格,有些命令不會(huì)輸出空格.
1.在表達(dá)式中()符號(hào)前面和{}括號(hào)前面都必須要加上\(\) 和 \{\}.
grep "^\(.*\):.*\1$" /etc/passwd
2.正則表達(dá)式默認(rèn)從字符串的最前面開始查找,但是如果錨定的是行尾,那么正則會(huì)從尾部開始查找
1.從尾部開始查找
2.從頭部開始查找
3.分組實(shí)例
第一分組匹配到的字符串是7,最后面的[0-9]*\1 表示匹配到以7結(jié)尾而且7前面可以包含任意個(gè)數(shù)字的數(shù)字
基本正則和擴(kuò)展正則的區(qū)別
1.基本正則語法 小括號(hào)和大括號(hào)前面需要加上\符號(hào)做轉(zhuǎn)義
grep -w "[0-9]\{2,3\}" /etc/passwd
2.擴(kuò)展正則 小括號(hào)和大括號(hào)前面不要加上轉(zhuǎn)義字符
grep -Ew "[0-9]{2,3}" /etc/passwd
egrep -w "[0-9]{2,3}" /etc/passwd
到此這篇關(guān)于正則表達(dá)式:過濾 S3 上以 _$folder$ 結(jié)尾的占位文件的文章就介紹到這了,更多相關(guān)正則表達(dá)式過濾占位文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python使用正則表達(dá)式去除(過濾)HTML標(biāo)簽提取文字功能
- 利用Python正則表達(dá)式過濾敏感詞的方法
- 詳解Android過濾emoji表情正則表達(dá)式
- PHP使用正則表達(dá)式實(shí)現(xiàn)過濾非法字符串功能示例
- Python使用正則表達(dá)式過濾或替換HTML標(biāo)簽的方法詳解
- C#使用正則表達(dá)式過濾html標(biāo)簽
- JS使用正則表達(dá)式過濾多個(gè)詞語并替換為相同長(zhǎng)度星號(hào)的方法
- javascript用正則表達(dá)式過濾空格的實(shí)現(xiàn)代碼
- MYSQL使用正則表達(dá)式過濾數(shù)據(jù)
- Java正則表達(dá)式過濾出字母、數(shù)字和中文
相關(guān)文章
一個(gè)非常不錯(cuò)的一個(gè)正則練習(xí)JS版
一個(gè)非常不錯(cuò)的一個(gè)正則練習(xí)JS版...2007-06-06Java 中的正則表達(dá)式單字符預(yù)定義字符匹配問題
正則表達(dá)式用極簡(jiǎn)的規(guī)則取代了復(fù)雜的驗(yàn)證邏輯,是一種通用的技術(shù),適用于多種編程語言,近通過本文給大家講解Java 中的正則表達(dá)式單字符匹配和預(yù)定義字符匹配問題,感興趣的朋友跟隨小編一起看看吧2022-11-11php驗(yàn)證用戶名是否以字母開頭與驗(yàn)證密碼實(shí)例
這篇文章主要介紹了php驗(yàn)證用戶名是否以字母開頭與驗(yàn)證密碼,實(shí)例匯總了幾個(gè)用戶注冊(cè)及提交表單時(shí)常用的正則表達(dá)式,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-12-12用于過濾空白字符的幾種常見的js正則表達(dá)式pattern
用于過濾空白字符的幾種常見的正則表達(dá)式pattern——在JavaScript中的表現(xiàn)形式2010-12-12js中exec、test、match、search、replace、split用法
exec、test、match、search、replace、split在JS中用的很頻繁,在網(wǎng)上看到對(duì)這些方法的總結(jié),就轉(zhuǎn)過來了,作個(gè)記錄2012-08-08EditPlus中的正則表達(dá)式實(shí)戰(zhàn)(6)
這篇文章主要介紹了EditPlus中的正則表達(dá)式及語義分析,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2016-12-12