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

ありがとうございました

4

4 に答える 4

2

これを試して

awk -F '\\'  '{ gsub("|", "", $2); print $0 }'  inputfile > newfile
于 2013-01-23T20:44:56.333 に答える
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 に答える
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つの'|'があると仮定した場合にのみ機能することに注意してください 削除する文字。

更新:タイトルに気づかなかったようです-すべての「|」を削除したい場合 '\'のペアの間の文字、jimmcnamaraのソリューションの方が優れています。

于 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 に答える