簡體   English   中英

awk-在正則表達式中刪除字符

[英]awk - remove character in regex

我想從此正則表達式中使用awk刪除1^1[0-9]{10}$如果在任何字段中都找到了該正則表達式)。 我已經嘗試使它與subsubstr工作了幾個小時,但我無法為此找到正確的邏輯。 我已經有了sed的解決方案: s/^1\\([0-9]\\{10\\}\\)$/\\1/ ,我需要使用awk進行此工作。

編輯輸入和輸出示例。 輸入:

10987654321
2310987654321
1098765432123    

(awk扭曲和過於復雜的語法)

輸出:

0987654321
2310987654321
1098765432123    

基本上,只有在其后跟十位數時才需要刪除前導1 第二行和第三行示例是正確的,第二行在1前面有23位,第三行有一個前導1但是后面是12位而不是10位。 這就是正則表達式指定的內容。

如果您可以使用gnu awk,則可以使用gensub函數:

echo '10987654321'|awk '{s=gensub(/^1([0-9]{10})$/,"\\1","g");print s}'
0987654321

編輯:

為每個領域做到這一點:

awk '{for(i=1;i<=NF;i++)$i=gensub(/^1([0-9]{10})$/,"\\1","g", $i)}7 file

測試:

kent$  echo '10987654321 10987654321'|awk '{for(i=1;i<=NF;i++)$i=gensub(/^1([0-9]{10})$/,"\\1","g", $i)}7'                                                                  
0987654321 0987654321

使用sub() ,您可以嘗試:

awk '/^1[0-9]{10}$/ { sub(/^1/, "") }1' file

或與substr()

awk '/^1[0-9]{10}$/ { $0 = substr($0, 2) }1' file

如果您需要測試每個字段,請嘗試遍歷它們:

awk '{ for(i=1; i<=NF; i++) if ($i ~ /^1[0-9]{10}$/) sub(/^1/, "", $i) }1' file

https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM