2016-05-18 11 views
2

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

я хотел бы заменить в строке, апостроф двумя одиночными кавычками
Вот моя строка:Держите пробелы при использовании команды в патч в Kornshell сценарии

04CA07807800106109XE00187200000081960   NI   0780643442  178'0700 

Я использовал эту команду, чтобы патч в заменить одиночные кавычки:

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

результат является

04CA07807800106109XE00187200000081960 NI 0780643442 178''0700 

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

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

Благодарим за помощь.

+0

BTW, 'printf '% s \ n'" $ line "' на самом деле немного правильнее, чем 'echo '$ line" '(что гораздо более корректно, чем' echo $ line') при работе с произвольными input - см. раздел ИСПОЛЬЗОВАНИЕ ПРИЛОЖЕНИЯ http://pubs.opengroup.org/onlinepubs/009604599/utilities/echo.html –

+1

... btw, http://shellcheck.net/ нашел бы эту ошибку для вас без нуждающихся в привлечении людей. –

+0

Я не знал об этом. Верно подмечено. благодаря ! – Green

ответ

1

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

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

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

+2

«Необязательная переменная - это обрезка всех нескольких пробелов в один». Вид. Он претерпевает [расщепление слов] (http://mywiki.wooledge.org/WordSplitting), что приводит к множеству параметров для 'echo', каждый без пробелов. –

+0

Спасибо, я отредактировал ответ с более правильным объяснением из вашего комментария. – anubhava

+1

Ну, это оказалось очень легко! Спасибо вам за помощь :) – Green