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

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

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

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

  • Значение Grep из json-файла
  • Удаление строк, содержащих указанную строку в разных файлах
  • Какие команды вы можете использовать в начале команды sed?
  • Избавление от линии с идеальным совпадением (не подстрокой) с помощью sed
  • ошибка в awk / sed использование манипуляций с файлами по очереди
  • Как изменить столбец в строке в текстовом файле с разделителями табуляции, если он дублируется
  •   sed: -e expression #1, char 1: unknown command: `o' 

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

  • Как следить и искать в файле, проходящем через фильтр, менее
  • Ошибка в формате при добавлении столбца с sed
  • Замените указанную строку на время ее появления с помощью sed или awk
  • Удалить узел XML, содержащий определенный элемент
  • почему этот простой скрипт sed не работал »nginx -V 2> & 1 | sed -r 's / - / \\ n / g' "
  • Скопируйте первые 2 строки из файла, а затем удалите строки
  • 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 
    Linux и Unix - лучшая ОС в мире.