Intereting Posts
контролировать процесс, сопоставляя полный cmdline Перенаправление портов IPTables должно быть сломанным Apache, но не было Стандартный рабочий процесс для оцифровки журналов или книг с использованием OCR при минимизации размера файла? В SciTe (Scintilla), как я могу создать синтаксис-выделение для моего собственного пользовательского языка? Как работает mkswap? Что в заголовке свопа, который он создает? Лучший инструмент для мониторинга использования сервера Как дать демону запрос на ввод пароля (в Xsession, keyloggersafe)? Когда интерпретировать awk как команду или язык программирования? / proc / bus / usb в / etc / fstab запрещает мой компьютер запускать графическую сессию Перенаправить stdout программы командной строки Windows под вином Проблемы с отображением Conky при перезагрузке «дополнительные строки новой строки» Отключить приостановление GDM на экране блокировки Как скопировать текст виртуального терминала из графического режима? Какие файловые системы в Linux хранят время создания? Файловая система HFS + монтируется только для чтения

удаление псевдонима из файла с помощью sed

Я создал программу развертки ping, которая сохраняет полученный IP-адрес в файл, называемый хостами. Затем я хотел удалить свой собственный IP-адрес из файла, не зная, что такое мой IP-адрес, поэтому я попытался сделать следующее:

alias ownip='hostname -I' sed ownip ./host 

Это не сработало, что привело к следующей ошибке:

  sed: -e expression #1, char 1: unknown command: `o' 

Итак, как я могу удалить свой собственный IP-адрес из файла?

Если входной файл «host» – это просто файл, в котором каждая строка является IP-адресом, и вы хотите удалить все IP-адреса, выводимые по hostname -I из этого файла, попробуйте следующее:

 sed -i "$(hostname -I | sed 's/\([.:[:xdigit:]]\{1,\}\)/\/\1\/d;/g')" ./host 

Сед внутри командной подстановки, что имя хоста передается только для преобразования IP-адресов, выводимых по имени хоста, в команды sed delete для внешнего sed. Флаг sed's говорит sed, чтобы перезаписать файл, который вы ему даете. Возможно, вы захотите запустить его без этого флага, чтобы убедиться, что результат верен или дать аргумент, который сообщает sed о создании резервной копии входного файла с этим аргументом в качестве суффикса, например -i'~' будет создавать резервную копию называемый host~ . Если ваша версия sed не имеет этого флага, вы можете записать во временный файл и перезаписать оригинал:

 sed "$(hostname -I | sed 's/\([.:[:xdigit:]]\{1,\}\)/\/\1\/d;/g')" ./host > /tmp/newhost && mv /tmp/newhost ./host 

Я думаю, что это то, что i делаю за кулисами.

Если вы действительно хотите использовать псевдоним, обратите внимание, что псевдонимы заменяются только текстовыми словами, когда они являются первым командным словом (-ами) в команде, поэтому в вашем исходном примере вам нужно будет использовать подстановку команд, то есть $ (ownip), чтобы дать sed вывод фактического выполнения этого псевдонима. Ваше сообщение об ошибке означает, что sed пытается использовать «ownip» в качестве своего скрипта, и в этом случае он жалуется, потому что sed не имеет команды «o».

я использую :

 ip a | grep inet | awk '{print $2}' 

если вы не хотите, чтобы ваш локальный адрес использовал дополнительный grep -v 127 .

Я бы немного ownip ваш псевдоним, чтобы trim пробелы, а затем использовать собственный псевдоним для создания команды удаления:

 alias ownip='hostname -I | xargs' sed -e "$(ownip | sed -e 's/[.]/[.]/g;s|.*|/&/d;|')" yourhostsfile