Вставьте это в сегмент sed. Ваш результат - sendin newline в конце каждого символа.
Заменить sed (после |):
sed ': a; N; $! Ba; s / \ n / / g '' s / .AssociationID = ([*]) \ '
Это будет считывать весь файл в цикле, а затем заменяет строки новой строки пробелом.
Обновление: объяснение.
create a label via :a
append the current and next line to the pattern space via N
if we are before the last line, branch to the created label $!ba
($! means not to do it on the last line (as there should be one final newline)).
finally the substitution replaces every newline with a space on the pattern space
(which is the whole file).
Возможно, вам потребуется настроить его для вашего окончательного вывода, но это должно вылечить проблему с одним символом на строку с помощью sed.
Не уверен, правильно ли я понимаю, но для показанных вами ввода и вывода следующая команда sed может выполнить преобразование, принимая во внимание, что ваш входной файл содержит терминаторы линии CR-LF:
sed 's/,/:/g;s/ /,/g' <<<$(tr -d '\r' <input_file) | tee output_file.tmp
mv output_file.tmp input_file
Решение без внешних двоичных файлов - но более медленное (чтение строки за строкой и изменениями), '→': ')
while read -u 3 -r line; do
echo -n "${line/,/:}," >> new_file
done 3< old_file
Неэффективен, но обязательно работает:
Откройте файл в gedit. Нажмите Ctrl + H. В find введите , и замените, введите :. Затем выберите «Заменить все».
Затем снова запустите экран «Найти и заменить». В поле «Найти» введите \n и оставьте поле «Заменить» пустым. Затем выберите «Заменить все».
Вот и все:)
Это работает:
cat test| sed s/,/:/g | sed s/$/,/g | xargs
Но производит:
22:33, 45:533,
Поэтому вам, возможно, придется использовать эту более длинную версию, чтобы получить точный результат, который вы просили: [!d2 ]
cat test| sed s/,/:/g | sed s/$/,/g | xargs | sed "s/, /,/g"
Я уверен, что с sed / awk есть лучшие способы сделать это, хотя это и делает то, о чем вы просите, и довольно легко читать.