Ваше описание проблемы не очень специфично. Я предполагаю, что вы хотите удалить двойные кавычки только для 1-го и 3-го полей. Если это так, любой из них должен работать:
sedsed -r 's/^"([^"]+)"(\s*,\s*[^,]+)\s*,\s*"([^"]+)"/\1\2, \3/' file.csv
Объяснение -r позволяет использовать расширенные регулярные выражения, позволяя нам использовать круглые скобки для захвата шаблонов, не требуя их устранения. Итак, мы сопоставляем цитату в начале строки (^"), за которой следует один или несколько символов без кавычек ([^"]+), затем закрывающая цитата, за которой следует 0 или более пробелов, запятая, затем 0 или больше пробелов (\s*,\s*), затем участок не запятых до следующей запятой (это определяет второе поле). Наконец, мы ищем 0 или более пробелов, запятую и заменяем это на 1-й захваченный шаблон (\1), затем 2-й (\2), запятую, пробел и третью. Perl perl -pe 's/^"([^"]+)"(\s*,\s*[^,]+)\s*,\s*"([^"]+)"/$1$2, $3/; ' file.csv
Объяснение -p означает печать каждой строки после применения скрипта, переданного в -e. Сам скрипт является в основном тем же самым регулярным выражением, что и в sed выше. Только здесь захваченные паттерны $1. awk awk -F, -v OFS="," '{gsub("\"","",$1)0gsub("\"","",$3);}1;' file.csv
Объяснение -F устанавливает разделитель полей в ,. OFS - разделитель выходного поля, который также установлен на ,, чтобы линии печатались правильно. [F20] делает замену, заменяя все " ничем, поскольку мы запускаем ее на 1-м ($1) и 3-м полях ($3), она удаляет только кавычки из этих полей. [F24] - это всего лишь awk стенограмма «print the line». Не пробовал это сам, но описание кажется достаточно реалистичным, чтобы попробовать.
1> сделать tar для вашей виртуальной ОС OS
2> начать с живого дистрибутива
3> разблокировать вашу виртуальную ОС в целевом разделе / s (/ dev / sda1 например,
4> сделать загрузочный раздел (fdisk может вам помочь): # fdisk / dev / sda Команда (m для справки): a (a = включить загрузочный флаг) Номер раздела (1- 4): 1 (1 = / dev / sda1) Команда (m для справки): q (q = exit)
5> установить grub в mbr (https://wiki.ubuntu.com/Grub2 ) # mount / dev / sda1 / mnt / # mount --bind / dev / mnt / dev # mount --bind / proc / mnt / proc # mount --bind / sys / mnt / sys # cd / mnt & amp; & amp; & amp; & amp; & amp; & amp; & amp; & amp; ; chroot. # (chroot) update-grub # (chroot) grub-install / dev / sda (NOT / dev / sda1!) # (chroot) grub-install --recheck / dev / sdX
6> Наслаждайтесь ...
Что именно от установки вы хотите перенести? Если все, о чем вы заботитесь, это пользовательские данные и предпочтения, вы могли бы просто скопировать все из своего домашнего каталога на виртуальную машину в файловую систему вне VM (например, keydrive), скопировать эти файлы на новую установку Ubuntu, а затем переустановите все программы, которые вы установили на виртуальной машине. Зависит от того, насколько вы настроили установку VM, а также о том, насколько сложны другие решения здесь.
Мне нравится использовать rsync для резервного копирования моей системы. Это полезно для справочника home directroy или ect, но может и не быть тем, что вы ищете с точки зрения полной миграции системы. Чтобы использовать rsync, вам необходимо установить ubuntu на обе системы. Обновите оба из них, чтобы пакеты были одинаковыми и находились на одном уровне (это не обязательно, но облегчает работу). Затем, чтобы скопировать домашний каталог с сервера1 на server2, вы можете запустить следующее на сервере1:
$rsync -avz /home/username/ username@server2:/home/username/
То, что мне нравится в этом, заключается в том, что rsync будет вычислять различия между каталогами и переносить изменения, а чем все. Таким образом, вы можете сохранить резервную копию, выполнив на сервере2 (для резервного копирования на сервере1):
$rsync -avz /home/username/ username@server1:/home/username/
hth