Редактировать все строки одновременно

1

У меня есть файл .txt почти со всеми аэропортами мира. Каждая строка - это отдельный аэропорт, и строки имеют следующий формат: город, страна - название аэропорта (код аэропорта)

то есть:

Le Mans, France - Arnage (LME)
Detroit, USA - Willow Run (YIP)
San Francisco, USA - San Francisco International (SFO)

(полный текст .txt находится здесь: http://snipt.org/AnT8 )

Но я хочу в этом формате: «Город, Страна - Название аэропорта (Код аэропорта)» => «Код аэропорта»

(да, с кавычками, это для кодирования PHP)

то есть:

"Le Mans, France - Arnage (LME)" => "LME"
"Detroit, USA - Willow Run (YIP)" => "YIP"
"San Francisco, USA - San Francisco International (SFO)" => "SFO"

Как я могу сделать это сразу?

Хьюго
источник
sed -i -e 's/(\(...\))/(\1)" => "\1"/ -e 's/^/"/' file.txtСлишком поздно для меня, чтобы развернуть это в правильный ответ с объяснением, но если кто-то еще хочет, они должны чувствовать себя свободно.
evilsoup
Какую ОС вы используете?
Terdon
Код аэропорта выглядит как уникальный идентификатор. Вы уверены, что вам не нужно вместо «Код аэропорта» => «вся линия»?
AnonymousLurker
@terdon Я использую Mac.
Хьюго
@AnonymousLurker Уверен, мне понадобится идентификатор позже. Но спасибо за предложение. :)
Хьюго

Ответы:

5

Они работают из коробки на Linux, OSX и т.д .:

  1. Perl

    perl -ne 'chomp; /\((.+?)\)/; print "\"$_\" => \"$1\"\n"' list.txt
    

    больше Perl, этот использует магию:

    perl -ane 'print "\"@F\" => \"$F[$#F]\"\n"' a
    
  2. AWK / простак

    awk -F '[()]' '{print "\""$0"\" =>\""$2"\""}' list.txt
    
  3. @ evilsoup's sed

    sed  -e 's/(\(...\))/(\1)" => "\1"/' -e 's/^/"/' list.txt
    

Ничто из этого не изменяет исходный файл, используйте -iдля Perl и sedпараметров или перенаправьте вывод, если вы хотите сохранить:

command list.txt > new_list.txt
terdon
источник
2
В OS X, если вы хотите sedвыполнить редактирование на месте без сохранения резервной копии, синтаксис немного отличается: sed -i '' ...(с GNU sed, в ''этом нет необходимости).
Гордон Дэвиссон
@GordonDavisson вы имеете в виду, что -iвызывает sedНЕ создавать резервную копию? В любом случае, поскольку моя команда sed (evilsoup) заключена в кавычки, смысл спорный, верно? Он будет редактировать на месте в OSX , если вы просто добавить -iк sedкоманде , как это?
тердон
Нет, эта -iопция запускает редактирование на месте и позволяет, например, указать расширение для файла резервной копии sed -i.bkp .... Если вы хотите редактировать на месте, но не хотите делать резервную копию, вы указываете пустое расширение; в -i ''двойных кавычках - явная пустая строка, сообщающая sed, что нет расширения для резервной копии, и, следовательно, нет резервной копии. Обратите внимание, что это полностью отделено от цитирования выражения sed.
Гордон Дэвиссон
1

Вы также можете использовать графический текстовый редактор с возможностями многострочного редактирования, например, Sublime Text .

  • Выберите все с помощью CmdA, затем включите режим редактирования строки с помощью ShiftCmdL.
  • Перейдите в конец строки Cmdи скопируйте код аэропорта в скобках. Затем оберните строку в кавычки, добавьте =>и снова вставьте код.
  • Нажмите Escдля выхода из режима редактирования строки.

В общем, вы можете сделать то же самое, что и с одной строкой.

slhck
источник
Для меня это самый простой ответ. Спасибо!
Хьюго
0

Emacs имеет возможность использовать несколько курсоров. Таким образом, вы можете напрямую редактировать все строки одновременно. Видеоролик об этом можно найти на веб-сайте Emacs Rocks http://emacsrocks.com/e13.html .

krishnab
источник
0

Вы можете скопировать и вставить его в электронную таблицу ... затем разбить строки на столбцы с помощью разделителя ... когда столбцы будут сделаны как "Город, Страна - Название аэропорта (код аэропорта)" ... просто добавьте еще один столбец с помощью повторяющаяся строка: => и скопируйте в нее столбец « Код аэропорта ».

С этим это может показаться так:

"Город, Страна - Название аэропорта (код аэропорта)" => "Код аэропорта"

Просто скопируйте и вставьте все содержимое таблицы в блокнот или любой другой текстовый редактор для Mac ... и в этом редакторе замените TAB ПРОБЕЛОМ или НИЧЕГО, в соответствии с требованиями кода.

вам понадобится только программное обеспечение для работы с электронными таблицами, например MS Excel, и текстовый редактор, такой как блокнот. Я пользователь Windows, поэтому не знаю о программах для Mac ...

mk117
источник