Найкращим інструментом неінтерактивного редагування файлів на місці є ex
.
ex -sc '%s/\(\.com\).*/\1/ | x' file.txt
Якщо ви використовували vi
і якщо ви коли-небудь вводили команду, яка починається з двокрапки, :
ви використовували колишню команду. Звичайно, багато більш досконалих або "фантазійних" команд, які ви можете виконати таким чином, є розширеннями Vim (наприклад :bufdo
) і не визначені в специфікаціях POSIX дляex
, але ці специфікації дозволяють по-справжньому дивовижною мірою потужності та гнучкості в невидимих редагування тексту (будь то інтерактивне чи автоматизоване).
Команда вгорі має кілька частин.
-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
лише замість того, щоб видаляти все після та включити першого/
символу? Що робити, якщоen.wikipedia.org/wiki/Ubuntu
у вашому списку була така URL-адреса ?