Автор Тема: Редактирование тектовых файлов в консоли  (Прочитано 519 раз)

Оффлайн hasculdr

  • Давно тут
  • **
  • Сообщений: 493
Есть дамп из mysql, который должен будет восстановиться уже в postgre.
В этом дампе есть строка из 16 тысяч символов. В определенных местах мне нужно взять символы в кавычки. mcedit и ee с задачей не справляются - зажатием стрелки вправо экран не прокручивается, срабатывают только одиночные нажатия. На 16+ тысяч меня не хватит. На vi и vim меня тоже не хватило. Чем еще можно попробовать отредактировать такую порнуху?

Оффлайн stranger573

  • Мастер
  • ***
  • Сообщений: 1 051
    • Email
Есть дамп из mysql, который должен будет восстановиться уже в postgre.
В этом дампе есть строка из 16 тысяч символов. В определенных местах мне нужно взять символы в кавычки. mcedit и ee с задачей не справляются - зажатием стрелки вправо экран не прокручивается, срабатывают только одиночные нажатия. На 16+ тысяч меня не хватит. На vi и vim меня тоже не хватило. Чем еще можно попробовать отредактировать такую порнуху?
Вам нужен редактор который умеет переносить длинные строки. mcedit это не умеет. Не парьтесь, отредактируйте в гуёвом текстовом редакторе, medit, например. Включите перенос текста, отключите "не разделять слова". У вас всего лишь страничка текста получится на ~200 строк (16000/76=211). Можно будет нормально по ней перемещаться.

Оффлайн ASte

  • Мастер
  • ***
  • Сообщений: 1 354
а поиском/заменой задача не решается?

Оффлайн hasculdr

  • Давно тут
  • **
  • Сообщений: 493
Файл на сервере без иксов, с автозаменой в mcedit я бы в два счета такое проделал. Наиболее правильный ответ в моем случае - самописный костыль на любом мало-мальски известном скриптовом языке. Жаль понял я это после ~400 ручных правок через vi, который еще и не был настроен корректным образом и постоянно вываливал мне сообщения о заполненной /tmp.

Онлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 16 768
    • Домашняя страница
    • Email
Для этого придумали sed.
Андрей Черепанов (cas@)

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 7 083
  • UNIX System V init
с автозаменой в mcedit я бы в два счета такое проделал.

Автозамена в mcedit есть в нескольких вариантах:
F9 > Поиск > Заменить(F4)

Перед первой попыткой замены, спросит, заменить в строке или все.
ZX Spectrum 128K
Привет от NM:  # echo -e "\n[device]\nwifi.scan-rand-mac-address=no" >> /etc/NetworkManager/NetworkManager.conf

Оффлайн stranger573

  • Мастер
  • ***
  • Сообщений: 1 051
    • Email
с автозаменой в mcedit я бы в два счета такое проделал.

Автозамена в mcedit есть в нескольких вариантах:
F9 > Поиск > Заменить(F4)

Перед первой попыткой замены, спросит, заменить в строке или все.
Там не в замене дело. Если весь файл состоит из одной сплошной строки в mcedit не видно текст, а елозить в строке по одному символу это мазохизм полный. mcedit не умеет переносить длинные строки, причём самое смешное, что mc в просмотре умеет.
« Последнее редактирование: 19.03.2018 19:46:39 от stranger573 »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 7 083
  • UNIX System V init
с автозаменой в mcedit я бы в два счета такое проделал.

Автозамена в mcedit есть в нескольких вариантах:
F9 > Поиск > Заменить(F4)

Перед первой попыткой замены, спросит, заменить в строке или все.
Там не в замене дело. Если весь файл состоит из одной сплошной строки в mcedit не видно текст, а елозить в строке по одному символу это мазохизм полный. mcedit не умеет переносить длинные строки, причём самое смешное, что mc в просмотре умеет.

:-) Да и флаг ему в руки:
- Перегнал man bash в текстовый файл
- через tr '\r' ' ' убрал перевод строки
- Получился файл со строкой в ~263 тысячи символов
- Сказал mcedit заменить в строке все слова arguments на words
- mcedit выполнил 142-е замены.

Но двигать курсор в mcedit по такой строке, это жестоко. Абсолютно нереальная вещь.
ZX Spectrum 128K
Привет от NM:  # echo -e "\n[device]\nwifi.scan-rand-mac-address=no" >> /etc/NetworkManager/NetworkManager.conf

Оффлайн hasculdr

  • Давно тут
  • **
  • Сообщений: 493
Добавлю сюда офтопиком, в интернетах ничего накопать не смог. При перемещении курсора посимвольно vi периодически выдавал ошибку вида "/tmp write failed, filesystem is full" и отображаемое на экране переставало перемещаться. Сам раздел /tmp заполнен не был (хотя df я делал после выхода из vi). Здесь речь шла именно о файловой системе и разделе, или у vi есть какие-то свои настройки?

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 7 083
  • UNIX System V init
Добавлю сюда офтопиком, в интернетах ничего накопать не смог. При перемещении курсора посимвольно vi периодически выдавал ошибку вида "/tmp write failed, filesystem is full" и отображаемое на экране переставало перемещаться. Сам раздел /tmp заполнен не был (хотя df я делал после выхода из vi). Здесь речь шла именно о файловой системе и разделе, или у vi есть какие-то свои настройки?

У меня на sysv vi не валится. Но легче от этого не становится
$ vi -N man_bash.txt

Перебирать даже по Ctrl+курсор 37 тысяч слов в одной строке, жалкое зрелище :-)
$ wc -l man_bash.txt
1 man_bash.txt
$ wc -w man_bash.txt
37032 man_bash.txt

sed делает замену быстро:
$ time -f %E sed -i 's/words/arguments/g' man_bash.txt
0:00.23
$ grep -o arguments man_bash.txt | wc -l
142
« Последнее редактирование: 20.03.2018 00:56:08 от Speccyfighter »
ZX Spectrum 128K
Привет от NM:  # echo -e "\n[device]\nwifi.scan-rand-mac-address=no" >> /etc/NetworkManager/NetworkManager.conf