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

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

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

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

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

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

3 Solutions collect form web for “удаление псевдонима из файла с помощью sed”

Если входной файл «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 
  • Заменить «o» на «0» в большом списке слов и сохранить исходное слово?
  • Почему в этом простом случае не является седой жадный?
  • sed - как исключить несколько шаблонов в матче
  • как переместить заголовок в последний столбец, используя awk или sed
  • как переименовать несколько файлов, заменив строку в имени файла? эта строка содержит "#"
  • поведение sed stdin
  • Как только выводить строки, которые моложе 3 месяцев?
  • Измените несколько строк файла XML с помощью командной строки
  • Поиск строки, с успехом Поиск ближайшего шаблона
  • Как удалить все неупорядоченные строки из текстового файла?
  • команда sed для добавления другого текста при множественном вводе строки
  • Ищете способ переместить четные строки в начало нечетных строк
  • Interesting Posts

    Управление ресурсами Openvz

    Считать дубликаты строк с ограничением

    Как я могу сделать вывод по умолчанию для цветового кодирования bash?

    Временное сохранение вывода команд оболочки в tmpfs

    Как перезапустить процесс автоматически, когда он был убит в linux / CentOS

    Сортировка массива путей файлов по их базам

    Apache 2 и PHP 5 не работают

    Сброс сетевых интерфейсов при пробуждении от приостановки

    Сценарий для удаления текстовых файлов

    Замедление только одного процесса для регулирования температуры процессора

    не может найти заголовок при создании buildworld в пользовательском исходном коде ядра

    VPN: сценарий в /etc/ppp/ip-up.d/ не выполняется автоматически при подключении PPTP

    Как заставить скрипт работать как демон, ожидая изменений в 2 файлах?

    Augeas не читает все файлы yum.repos.d. Зачем?

    Выполните две команды параллельно, но только дождитесь завершения одной команды, прежде чем запускать следующую

    Linux и Unix - лучшая ОС в мире.