2010-04-12 48 views

回答

3

你需要躲避+

$ sed 's/|\+/\t/g' file 
BRADI5G20430 BRADI5G20430.1 1 

,或者你可以使用sed的-r選項,但這個時候,+將是「一個或多個」,你需要躲避「|」因爲在正則表達式中,它意味着交替。

$ sed -r 's/\|+/\t/g' file 
BRADI5G20430 BRADI5G20430.1 1 

或者使用awk,將字段分隔符設置爲「|」然後設置輸出字段分隔OFS到標籤\t

例如

$ awk -F"|" '{$1=$1}1' OFS="\t" file 
BRADI5G20430 BRADI5G20430.1   1 

此替換每個選項卡以 「|」。如果你想替換所有的「|」帶有一個標籤

$ awk '{gsub(/\|+/,"\t")}1' file 
BRADI5G20430 BRADI5G20430.1 1 
1

不知道把我的頭爲什麼+不起作用的頂部,但這會:

$ echo "BRADI5G20430|BRADI5G20430.1||1" | sed -e 's/\|\{1,\}/\t/g' 
BRADI5G20430\tBRADI5G20430.1\t1 
1

怎麼沒工作?

提示:如果你看到它沒有工作,你應該能夠看到你需要做些什麼才能使它工作 - 嘗試刪除零件並查看行爲如何變化。

提示#2:它是sed無法識別的+部分。

sed 's/\|\|*/\t/g'

2

我相信你正在尋找的命令實際上是

sed -e 's/[|]\{1,\}/\t/g' 

桑達不使用+語法一個或更多的,但允許你指定的開放式號碼的重新分配。有關更多信息,請參閱here

+0

sed確實使用'+',如果不使用'-r',你只需要轉義它 – ghostdog74 2010-04-12 02:35:18