Лучший инструмент для неинтерактивного редактирования файлов на месте ex.
ex -sc '%s/\(\.com\).*/\1/ | x' file.txt
Если вы использовали viи если вы когда-либо вводили команду, начинающуюся с двоеточия, :вы использовали команду ex. Конечно, многие из более продвинутых или «причудливых» команд, которые вы можете выполнить таким образом, являются расширениями Vim (например :bufdo) и не определены в спецификациях POSIXex , но эти спецификации обеспечивают действительно удивительную степень мощности и гибкости в невизуальном виде. редактирование текста (интерактивное или автоматическое).
Команда выше состоит из нескольких частей.
-sвключает беззвучный режим для подготовки exк пакетному использованию. (Подавить выходные сообщения и т. Д.)
-cзадает команду для выполнения после file.txtоткрытия файла ( в данном случае) в буфере.
%является спецификатором адреса, эквивалентным - 1,$это означает, что следующая команда применяется ко всем строкам буфера.
sявляется замещающей командой, с которой вы, вероятно, уже знакомы. Он обычно используется viи по существу идентичен функциям sкомандыsed , хотя некоторые из расширенных функций регулярных выражений могут различаться в зависимости от реализации. В этом случае от «.com» до конца строки заменяется просто «.com».
Вертикальная черта отделяет последовательные команды для выполнения. Во многих (большинстве) exреализаций вы также можете использовать дополнительную -cопцию, например:
ex -sc '%s/\(\.com\).*/\1/' -c x file.txt
Тем не менее, это не требуется POSIX.
Команда xзавершается после записи любых изменений в файл. В отличие от того, wqчто означает «запись и выход», xзапись в файл производится только в том случае, если буфер был отредактирован. Таким образом, если ваш файл не изменен, отметка времени будет сохранена.
.comтолько вместо того, чтобы удалять все после и включая первый/символ? Что делать, если у вас есть URL-адрес, какen.wikipedia.org/wiki/Ubuntuв вашем списке?