Сохраняйте пробелы при использовании команды sed в сценарии kornshell

У меня возникли проблемы с командой sed:

Я хочу заменить в строке одинарную кавычку двумя одинарными кавычками
Вот моя строка:

04CA07807800106109XE00187200000081960          NI         0780643442        178'0700

Я использовал эту команду sed для замены одинарной кавычки:

line=`echo $line | sed "s/'/''/g"`

Результат

04CA07807800106109XE00187200000081960 NI 0780643442 178''0700

Как видите, одинарная кавычка правильно заменена двумя одинарными кавычками.
Но я потерял все пробелы между каждым символом строки, и мне действительно нужно их сохранить.

Есть ли способ сохранить эти пробелы с помощью команды sed?
Я попробовал с помощью команды tr и получил тот же результат.

Спасибо за помощь.


person Green    schedule 18.05.2016    source источник
comment
Кстати, printf '%s\n' "$line" на самом деле немного более правильный, чем echo "$line" (который сам по себе гораздо более правильный, чем echo $line) при работе с произвольным вводом - см. раздел ИСПОЛЬЗОВАНИЕ ПРИЛОЖЕНИЯ pubs.opengroup.org/onlinepubs/009604599/utilities/echo.html   -  person Charles Duffy    schedule 18.05.2016
comment
...кстати, shellcheck.net нашел бы эту ошибку для вас, не прибегая к помощи людей.   -  person Charles Duffy    schedule 18.05.2016
comment
Я ничего не знал об этих вещах. Верно подмечено. Спасибо !   -  person Green    schedule 18.05.2016


Ответы (1)


Проблема не в команде sed, а в вашей переменной без кавычек. Использовать:

line=`echo "$line" | sed "s/'/''/g"`

Переменная без кавычек приводит к разделению слов, что приводит к тому, что несколько параметров становятся равными echo, что приводит к разделению слов через один интервал.

person anubhava    schedule 18.05.2016
comment
Переменная без кавычек обрезает все несколько пробелов в один. Что-то вроде. Он подвергается разбиению слов, что приводит к множеству параметров echo, каждый из которых не содержит пробелов. - person Mr. Llama; 18.05.2016
comment
Спасибо, я отредактировал ответ с более правильным объяснением из вашего комментария. - person anubhava; 18.05.2016
comment
Что ж, это оказывается совсем несложно! Спасибо вам обоим за помощь :) - person Green; 18.05.2016