Предположим, у меня есть список URL-адресов в текстовом файле:
google.com/funny
unix.stackexchange.com/questions
isuckatunix.com/ireallydo
Я хочу удалить все, что идет после «.com».
Ожидаемые результаты:
google.com
unix.stackexchange.com
isuckatunix.com
Я старался
sed 's/.com*//' file.txt
но он также удален .com
.
text-processing
sed
Кошур
источник
источник
.com
только вместо того, чтобы удалять все после и включая первый/
символ? Что делать, если у вас есть URL-адрес, какen.wikipedia.org/wiki/Ubuntu
в вашем списке?Ответы:
Чтобы явно удалить все, что идет после «.com», просто настройте существующее решение sed, чтобы заменить «.com (что угодно)» на «.com»:
Я подправил ваше регулярное выражение, чтобы избежать первого периода; в противном случае это соответствовало бы чему-то вроде «thisiscommon.com/something».
Обратите внимание, что вы можете дополнительно закрепить шаблон «.com» с помощью наклонной черты влево, чтобы случайно не обрезать что-то вроде «sub.com.domain.com/foo»:
источник
Вы можете использовать
awk
разделитель полей (-F
) следующим образом:Объяснение:
Поскольку вы хотите удалить каждую вещь после
.com
,-F '.com'
отделяете строку с.com
иprint $1
выдает только часть до.com
. Итак,$1".com"
добавляет.com
и дает ожидаемый результат.источник
/
как ФС и занять первое поле?acomercial.com/asdsad
Лучший инструмент для неинтерактивного редактирования файлов на месте
ex
.Если вы использовали
vi
и если вы когда-либо вводили команду, начинающуюся с двоеточия,:
вы использовали команду ex. Конечно, многие из более продвинутых или «причудливых» команд, которые вы можете выполнить таким образом, являются расширениями Vim (например:bufdo
) и не определены в спецификациях POSIXex
, но эти спецификации обеспечивают действительно удивительную степень мощности и гибкости в невизуальном виде. редактирование текста (интерактивное или автоматическое).Команда выше состоит из нескольких частей.
-s
включает беззвучный режим для подготовкиex
к пакетному использованию. (Подавить выходные сообщения и т. Д.)-c
задает команду для выполнения послеfile.txt
открытия файла ( в данном случае) в буфере.%
является спецификатором адреса, эквивалентным -1,$
это означает, что следующая команда применяется ко всем строкам буфера.s
является замещающей командой, с которой вы, вероятно, уже знакомы. Он обычно используетсяvi
и по существу идентичен функциямs
командыsed
, хотя некоторые из расширенных функций регулярных выражений могут различаться в зависимости от реализации. В этом случае от «.com» до конца строки заменяется просто «.com».Вертикальная черта отделяет последовательные команды для выполнения. Во многих (большинстве)
ex
реализаций вы также можете использовать дополнительную-c
опцию, например:Тем не менее, это не требуется POSIX.
Команда
x
завершается после записи любых изменений в файл. В отличие от того,wq
что означает «запись и выход»,x
запись в файл производится только в том случае, если буфер был отредактирован. Таким образом, если ваш файл не изменен, отметка времени будет сохранена.источник
sed
-i. Он читает / пишет в буферы на диске. Смотрите сами сex -r
помощьюpreserve
команды.preserve
команда?Очень быстрый, простой и грязный способ Python:
Пробный прогон
источник
.com
, оно просто удаляет все, начиная с первого/
в строке. (что, на мой взгляд, даже лучший подход!).net
, в других подходах часть, которая идет после домена и расширения, не будет удалена, поэтому безопаснее использовать в/
качестве разделителя.