0

我以前在这里得到过类似的问题的回答,但这一次对我来说更具挑战性,我所需要的只是删除 | 在名称“\WAPNER|约翰|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

4 回答 4

2

这可能对您有用(GNU Sed):

sed -r '/\\[^\\]*\\/{s//\n&\n/;h;s/[\\|]//g;G;s/.*\n(.*)\n.*\n(.*)\n.*\n/\2\1/}' file
于 2013-01-23T22:17:14.457 回答
2

尝试这个

awk -F '\\'  '{ gsub("|", "", $2); print $0 }'  inputfile > newfile
于 2013-01-23T20:44:56.333 回答
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 的解决方案更好。

于 2013-01-23T20:42:00.700 回答
0

尝试这个

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

输出

10.46|5060|100002366551140|WAPNER john M |100002366551750

于 2013-01-24T05:34:51.887 回答