[英]sed/awk specify ranges in regex
我有這樣的文件列表輸出:
/path/F201405151800
/path/F201405151900
/path/F201405152000
/path/F201405152100
我將此輸出通過管道傳遞到sed並使用以下語法:
sed -n '/F.\{8\}'$var1'/,/F.\{8\}'$var2'/p'
$ var1和$ var2是用戶輸入,可以看到,它們是指我文件列表中的一天中的不同時段。 如果找到$ var1和$ var2值,則上述語法可以完美地工作。 但是,如果$ var1的值為16,而$ var2為19 sed,則不會輸出任何內容,因為在上述文件列表范圍內找不到16。
一個解決方案是:
sed -n '/F.\{8\}1[6-9]/p'
...這是可行的,但我現在面臨的問題是如何指定兩位數范圍以包括如下內容:16-20。 我試圖像這樣在單引號之間進行遍歷:
sed -n '/F.\{8\}'{16..21}'/p'
...但是我得到的輸出是:
sed: can't read /F.\{8\}16/p: No such file or directory
sed: can't read /F.\{8\}17/p: No such file or directory
sed: can't read /F.\{8\}18/p: No such file or directory
sed: can't read /F.\{8\}19/p: No such file or directory
sed: can't read /F.\{8\}20/p: No such file or directory
sed: can't read /F.\{8\}21/p: No such file or directory
我真的不需要使用sed,我用awk探索了一些選項,但是無法獲得我想要的東西,主要問題是我不知道如何指定正則表達式RS,因此我將小時數作為awk字段並執行一些條件
'$2 > 16 && $2 < 21 {print}'
嘗試添加-e
:
sed -n -e '/F.\{8\}'"$var1"'/,/F.\{8\}'"$var2"'/p'
並始終引用變量以防止單詞分裂。
更新:
awk -v A=17 -v B=21 -F/ '!/\/F[0-9]{12}$/{next} {h = substr($NF, 10, 2)} h >= A && h <= B'
您可以使用以下awk:
awk -F'/' '{h=$3; gsub(/^F[0-9]{6}|[0-9]{4}$/, "", h)} h > 12 && h < 21' file
/path/F201405151800
/path/F201405151900
/path/F201405152000
/path/F201405152100
為了獲得兩位數的范圍,您可以嘗試執行以下操作:
sed -n '/F.\{8\}(1[6-9]|2[01])/p'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.