Команда Linux к строке замены в БОЛЬШОМ файле с другой строкой

Обнаружение сенсорных экранов и Движения взаимодействует через интерфейс для человеко-машинного взаимодействия.

, Например:

  • Сенсорные экраны для PDAs, iPhone или Обнаружения движения Nintendo DS
  • , Nintendo Wii Controller или (до меньшего градуса) контроллер SixAxis для Playstation 3.

Только вопрос... эти технологии действительно пост80-е?

8
задан Esteban Küber 7 August 2009 в 04:43
поделиться

7 ответов

sed - хороший выбор для больших файлов.

sed -i.bak -e 's%C://temp%//home//some//blah%' large_file.sql

Это хороший выбор, потому что он не читает весь файл сразу, чтобы изменить его. Цитата из руководства:

Потоковый редактор используется для выполнения основные текстовые преобразования на входе поток (файл или ввод из трубопровод). Хотя в чем-то похожи редактору, который разрешает скрипт редактирует (например, ed), sed работает сделать только один проход над ввод (ы), и, следовательно, более эффективный. Но это способность sed фильтровать текст в конвейере, который особенно отличает его от другие типы редакторов.

Соответствующий раздел руководства находится здесь . Небольшое объяснение следует за

-i.bak позволяет редактировать на месте, оставляя резервную копию с расширением .bak

s% foo% bar% использует s, команду замены, которая заменяет совпадения первой строки между знаком%, 'foo', для второго строка, «полоса». Обычно это пишется как s // но потому что у твоих струн много косых черт, удобнее поменяйте их на что-нибудь другое, чтобы избегайте их побега.

Пример

vinko@mithril:~$ sed -i.bak -e 's%C://temp%//home//some//blah%' a.txt
vinko@mithril:~$ more a.txt
//home//some//blah
D://temp
//home//some//blah
D://temp
vinko@mithril:~$ more a.txt.bak
C://temp
D://temp
C://temp
D://temp
29
ответ дан 3 November 2019 в 12:13
поделиться

Просто для полноты. Вместо замены используется perl .

perl -i -p -e 's{c://temp}{//home//some//blah}g' mysql.dmp

Также не требуется экранирования обратной косой черты. ;)

12
ответ дан 3 November 2019 в 12:13
поделиться

Попробовать sed ? Что-то вроде:

sed 's/c:\/\/temp/\/\/home\/\/some\/\/blah/' mydump.sql > fixeddump.sql

Избегая всех этих косых черт, это выглядит ужасно, вот более простой пример, который меняет foo на bar.

sed 's/foo/bar/' mydump.sql > fixeddump.sql

Как отмечали другие, вы можете выбрать свой собственный разделитель, который предотвратит наклон зубочистки синдром в данном случае:

sed 's|c://temp\\|home//some//blah|' mydump.sql > fixeddump.sql

В sed умно то, что он работает с потоком , а не с файлом сразу, поэтому вы можете обрабатывать огромные файлы, используя только скромный объем памяти .

4
ответ дан 3 November 2019 в 12:13
поделиться

Это может сделать команда sed . Вместо того, чтобы избегать косой черты, вы можете выбрать другой разделитель (в данном случае _):

sed -e 's_c://temp/_/home//some//blah/_' file1.txt > file2.txt
1
ответ дан 3 November 2019 в 12:13
поделиться

Также существует нестандартная утилита UNIX, rpl , которая делает то же самое, что и примеры sed ; однако я не уверен, работает ли rpl поточно, поэтому sed может быть лучшим вариантом здесь.

3
ответ дан 3 November 2019 в 12:13
поделиться
perl -pi -e 's#c://temp#//home//some//blah#g' yourfilename

Параметр -p будет рассматривать этот сценарий как цикл, он будет читать указанный файл построчно, выполняя поиск и замену регулярного выражения.

-i Этот флаг следует использовать вместе с флаг -p. Это дает Perl команду отредактировать файл на месте.

-e Просто означает выполнить этот код Perl.

Удачи

1
ответ дан 3 November 2019 в 12:13
поделиться

gawk

awk '{gsub("c://temp","//home//some//blah")}1' file
1
ответ дан 3 November 2019 в 12:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: