我希望在 Linux 終端中使用 sed 或 awk 將文本檔案每一行上的每一秒逗號替換為空格。該檔案如下所示:
1,2,5,32,67,28,40,30...
2,4,90,18,22,40,20,15....
我想要一個特定的軟體輸入檔案格式:
1,2 5,32 67,28 40,30
2,4 90,18 22,40 20,15...
我試過了
sed -r 's/([^,] [^,]) /\1\s/g' Test.txt > Test2.txt
但這沒有用。任何幫助將非常感激。
uj5u.com熱心網友回復:
使用sed
$ sed 's/\(.\{3\}\),/\1 /g' input_file
1,2 5,32 67,28 40,30...
2,4 90,18 22,40 20,15....
uj5u.com熱心網友回復:
您可以使用
sed -E 's/(,[^,]*),/\1 /g' file > newfile
詳情:
(,[^,]*),匹配并捕獲到組 1 一個逗號,然后是除逗號之外的任何零個或多個字符,然后匹配一個逗號\1將匹配替換為 Group 1 值并在其后添加一個空格。
該-E選項啟用 POSIX ERE 正則運算式語法。
查看在線演示:
#!/bin/bash
s='1,2,5,32,67,28,40,30...
2,4,90,18,22,40,20,15....'
sed -E 's/(,[^,]*),/\1 /g' <<< "$s"
輸出:
1,2 5,32 67,28 40,30...
2,4 90,18 22,40 20,15....
uj5u.com熱心網友回復:
稍微冗長的基于 awk 的解決方案已確認適用于 gawk、mawk-1、mawk-1.996 和 nawk:
[g/m/n]awk 'sub("^"(_="[^,] ,")_,"&"(_="\3\21"))sub(","_," ")_'
我\032\021選擇了比僅僅使用 subsep 更安全的選擇,因為這個組合出現的機會相當低。一個更簡潔的解決方案就像
mawk 'sub("^"(_="[^,] ,")_,"&\5")sub(",\5"," ")_'
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/453385.html
