LINUX.ORG.RU

заменить совпадения в файле,все кроме тех которые находятся в "

 


0

2

Доброго времени суток,у меня проблемка, у меня есть файл формата 325456,132,32,,,,,,'текст','текст,,текст,текст,текст,,' мне нужно в нем заменить две запятых(,,) стоящих рядом на (,@@,) то есть между ними добавить (@@)но есть одно но мне не нужно трогать запятые в одинарных кавычках,там нужно оставить как есть!Sed-ом меняет во всем файле,не кто не подскажет как правильно сделать,что бы у меня строка приняла следующий вид 325456,132,32,@@,@@,@@,@@,@@,'текст','текст,,текст,текст,текст,,' Помогите пожалуйста


Что-то мне подсказывает, что тебе для этого нужны регулярки…

post-factum ★★★★★
()
Ответ на: комментарий от tyakos

Это просто маленькая часть скрипта по переливки данных из одной БД в другую написанную на bash,хотелось бы просто уже доделать на bash,что бы все запускалось 1ним файлом

jraver
() автор топика

Проще всего это сделать, естественно, на sed:

$ echo "325456,132,32,,,,,,'текст','текст,,текст,текст,текст,,'" | sed ":a;s/^\(\([^']*\('[^']*'\)*\)*\),,/\1@@/;ta"
325456,132,32@@@@@@'текст','текст,,текст,текст,текст,,'
anarquista ★★★★★
()
Ответ на: комментарий от anarquista

немного неправильно прочитал условие, исправляю:

$ echo "325456,132,32,,,,,,'текст','текст,,текст,текст,текст,,'" | sed ":a;s/^\(\([^']*\('[^']*'\)*\)*\),,/\1,@@,/;ta"
325456,132,32,@@,@@,@@,@@,@@,'текст','текст,,текст,текст,текст,,'
anarquista ★★★★★
()

Это ж csv, не знаю как с ним в баше, но для любого языка наверняка есть либы для его парсинга.

А вообще что-то мне подсказывает что можно конвертить либо без цсв вообще, либо в той БД в которую это всё льётся задать @@ значением по умолчанию для пустых полей.

Kalashnikov ★★★
()
Ответ на: комментарий от anarquista

Спасибо работает,щас добавил его в скрипт и буду тестить на больших файлах!Понял что надо sed углубленно изучать,еще раз спасибо

jraver
() автор топика
Ответ на: комментарий от Kalashnikov

Понимаете проблема в том что я с Sybasе IQ знаком 3ю неделю,а у нее есть маленькие нюансы,та и еще то ли сервер криво настроен то ли я,но дело в том что я устанавливал разделители,и другие опции а оно их как бы игнорировало,а человек который занимается этим долгое время, помочь не смог,проблема аналогичная была и у него,всем спасибо за советы

jraver
() автор топика
Ответ на: комментарий от jraver

Но лучше, действительно, использовать какие-то специализированные решения для парсинга csv-файлов. Хотя бы python и его модули.

Потому что текст же может содержать экранированные кавычки или что-то подобное? sed с этим уже не справится.

anarquista ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.