[英]awk - remove character in regex
我想從此正則表達式中使用awk
刪除1
: ^1[0-9]{10}$
如果在任何字段中都找到了該正則表達式)。 我已經嘗試使它與sub
或substr
工作了幾個小時,但我無法為此找到正確的邏輯。 我已經有了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.