2013-01-23 61 views
0

我在這裏得到了類似的問題,但這一次,對我來說這是一個更具挑戰性的問題,我需要的是刪除|在名稱之間「\ WAPNER | john | M \」如何刪除|在多個反向反斜槓之間

它將是一個加號,以刪除反斜槓了。

文件

10.46|5060|100002366551140|\WAPNER| john | M\ |100002366551750 

所需的輸出

10.46|5060|100002366551140|\WAPNER john M\ |100002366551750 

這將是完美的,如果您的解決方案也將與單斜槓:)名工作

10.46|5060|100002366551140|\WAPNER| M\ |100002366551750 

輸出將

10.46|5060|100002366551140|\WAPNER M\ |100002366551750 

謝謝

+0

您已經提問[今天早些時候](http://stackoverflow.com/questions/14484220/using-sed-or-awk-to-delete-slash-from-fields/14484726#14484726)。那裏的答案有幫助嗎?如果沒有,你可以評論和編輯你的問題,而不是創建一個副本。 – andrewdotn

回答

2

這可能會爲你(GNU SED)工作:

sed -r '/\\[^\\]*\\/{s//\n&\n/;h;s/[\\|]//g;G;s/.*\n(.*)\n.*\n(.*)\n.*\n/\2\1/}' file 
+0

絕對驚人!謝謝! – Deano

1
$ echo "10.46|5060|100002366551140|\WAPNER| john | M\ |100002366551750" | awk -F'|' '{print $1"|"$2"|"$3"|"$4$5$6"|"$7}' | sed s.\\\\..g 
10.46|5060|100002366551140|WAPNER john M |100002366551750 

注意它會工作只是假設總有3 '|'字符刪除。

更新:似乎我沒有注意到標題 - 如果你想刪除所有'|'一對'\'之間的字符,jim mcnamara的解決方案更好。

2

試試這個

awk -F '\\' '{ gsub("|", "", $2); print $0 }' inputfile > newfile 
+0

這個工作的名稱也有2個斜槓嗎? example \ WAPNER | M \ – Deano

+0

是的,斜槓被刪除,因爲IFS被設置爲\哪個是'\\'轉義的反斜槓。 OFS仍然是默認值,所以當$ 0字符串被寫入時,所有\ chars字符在打印時被忽略。如果有一些你必須保持這段代碼不適合你。 –

+0

爲解決方案+1,但ITYM FS不是IFS在您的評論。對於@ user1007727 - 不要隨時更改您的要求,只告訴我們您需要做的是什麼,以便我們可以幫助您一次解決問題。 –

0

試試這個

sed -re 's/\\(\w+)(\|)(\w*)(\|)([ A-Za-z]+)\\/\1\3\5/g' temp.txt

輸出

10.46|5060|100002366551140|WAPNER john M |100002366551750