Найкращим інструментом неінтерактивного редагування файлів на місці є 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-адреса ?