Лучший инструмент для неинтерактивного редактирования файлов на месте 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
в вашем списке?