Как найти несоответствующий текстовый разделитель - PullRequest
0 голосов
/ 08 мая 2019

Я пытаюсь удалить двойные кавычки, которые появляются в строке, поступающей из дБ, потому что это вызывает ошибку потока в другом приложении.Я не могу очистить дБ, чтобы удалить их, поэтому мне нужно заменить персонажа на лету.

Я пытался использовать sed, ssed и perl, но все безуспешно.Это регулярное выражение определяет местонахождение проблемных кавычек, но когда я подключаю его к sed, чтобы заменить их одинарными кавычками, мой вывод все еще содержит двойные кавычки.

sed "s/(\?<\!\t|^)\"(\?\!\t|$)/'/g" test.txt 

Я на Mac, если это выглядитбит нечетный.

Регулярное выражение допустимо, но когда я тестирую файл с разделителями табуляции, содержащий это:

"foo"   "rea"son"   "text's"

Мой вывод идентичен приведенному выше.Есть идеи, что я делаю не так?

Спасибо

1 Ответ

0 голосов
/ 08 мая 2019

Я предполагаю, что вы хотите превратить все вхождения ", которые не находятся на границе поля (т. Е. Предшествуют или сменяются табуляцией или началом / концом строки) на '.

Это можно сделать с помощью perl и следующей подстановки:

s/(?<=[^\t])"(?=[^\t\n])/'/g;

(С помощью sed это невозможно напрямую, так как он не поддерживает утверждения о просмотре / прогнозе.)

Чтобы использовать этот код в командной строке, его необходимо экранировать для любой используемой вами оболочки.Предполагая bash или подобную sh-подобную оболочку:

perl -pe 's/(?<=[^\t])"(?=[^\t\n])/'\''/g' test.txt

Здесь я использую '...', чтобы процитировать большую часть кода.Чтобы получить один ' в строку в кавычках, я покидаю область ...' в кавычках, добавляю экранированную одинарную кавычку \' и переключаюсь обратно на строку в кавычках '....Вот почему литерал ' превращается в '\'' в командной строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...