2013-01-23 40 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