如何删除|多个反斜杠之间

时间:2013-01-23 20:34:35

标签: bash shell sed awk

我之前在这里得到了类似的问题,但这一次对我来说有点挑战,我需要的是删除所有问题。名称“\ 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

谢谢

4 个答案:

答案 0 :(得分:2)

试试这个

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

答案 1 :(得分:2)

这可能适合你(GNU Sed):

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

答案 2 :(得分: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'|' chars to remove。

更新:似乎我没有注意到标题 - 如果你想删除所有'|'在一对'之间的字符,jim mcnamara的解决方案更好。

答案 3 :(得分:0)

试试这个

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

输出

10.46|5060|100002366551140|WAPNER john M |100002366551750