4

Я обычно импортирую данные из CSV-файлов в MySQL, но мой поставщик данных оставляет пустые записи как "", поэтому мне нужно заменить "" на "\N". Это достаточно просто с помощью сценария, как

for csvfile in *.csv
do
    sed -i -e 's/^,/\\N,/' -e 's/,$/,\\N/' -e 's/,,/,\\N,/g' -e 's/,,/,\\N,/g' $csvfile
done

Тем не менее, у меня есть CSV-файл с запятыми, поэтому импорт не удается. Я получил файл с разделителями табуляции и попытался

for txtfile in *.txt
do
    sed -i -e 's/^\\t/\\N\\t/' -e 's/\\t$/\\t\\N/' -e 's/\\t\\t/\\t\\N\\t/g' -e 's/\\t\\t/\\t\\N\\t/g' $txtfile
done

Но все равно не получается (насколько я могу судить, скрипт не добавляет "\N"). Когда я открываю файл с разделителями табуляции в Vim и набираю :set list создается впечатление, что вкладки хранятся вместо «^ I». Я попытался заменить "\t" на "\^ I", но не добавил необходимые символы "\N" NULL.

Есть идеи? Спасибо!

2 ответа2

6

^ обычно является сокращением для Ctrl, а Ctrl-I совпадает с Tab

2

У вас уже есть ответ на вопрос, что такое ^ Is, но одна из причин, по которой ваша вторая команда sed не работает, заключается в том, что вы используете неправильную последовательность для сопоставления табуляции. Последовательность, соответствующая вкладке, равна \t , а не \\t . \\t соответствует a \ за которым следует t .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .