1

| 間のスラッシュを削除しようとしています。名前を含む \ \ の間'

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

望ましい出力

10.46|5060|100002366551140|WAPNER M |100002366551750

sed または awk を使用している間、あなたの助けは大歓迎です:)

4

4 に答える 4

2
$ cat file
10.46|5060|100002366551140|\WAPNER| M\ |100002366551750

$ sed 's/\\\([^\\]*\)|\([^\\]*\)\\/\1\2/' file
10.46|5060|100002366551140|WAPNER M |100002366551750

「\」を削除したくない場合は、括弧内に移動してください。

于 2013-01-23T16:32:06.800 に答える
1

複数のバックスラッシュの場合に試すことができる代替 awk:

awk -F\| '!(NR%2){$1=$1}1' RS=\\ ORS= OFS= file

また:

awk -F\\ '{for(i=2; i<=NF; i+=2) gsub(/\|/,x,$i)}1' OFS= file
于 2013-02-27T16:00:24.953 に答える
0

これを試して

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

出力

10.46|5060|100002366551140|WAPNER M |100002366551750

于 2013-01-24T05:29:22.380 に答える
0

このようなケースを処理する必要がある場合:

10.46|5060|100002366551140|\WAPNER| M\ |100002366551750
10.12|\FOO| BAR| BAZ\|12|\X| Y| Z\|14

一致した正規表現の一部に繰り返し置換を適用する必要があるため、sed で簡単に実行できるとは思いません。

Python で行うのは非常に簡単です。doit.py:

#!/usr/bin/env python2.7

import re
import sys

RE = re.compile(r'\\([^\\]*\|[^\\]*)\\')

for line in sys.stdin.readlines():
    matchiter = RE.finditer(line)
    while 1:
        for match in matchiter:
            matching_text = match.group(0)
            replacement_text = match.group(1).replace('|', '')
            line = line.replace(matching_text, replacement_text)
        else:
            break
    print line,

擬似コード:

  • s の間に任意の|記号がありますが\:

    • の間の部分 ( Python \のようにアクセス ) をつかみ、その中のs を取り除きます。名前を付けて保存match.group(1)|replacement_text
    • 次に、一致した元のテキストを\replacement_text、およびループに置き換えます

できます!

$ cat input
10.46|5060|100002366551140|\WAPNER| M\ |100002366551750
10.12|\FOO| BAR| BAZ\|12|\X| Y| Z\|14
$ ./doit.py < input
10.46|5060|100002366551140|WAPNER M |100002366551750
10.12|FOO BAR BAZ|12|X Y Z|14
于 2013-01-23T16:39:21.170 に答える