как удалить (удалить) слово в командной строке perl или unix - PullRequest
1 голос
/ 08 марта 2011

Я хочу удалить имя домена из файла списка устройств. У меня есть (device.marketing.company.com) и некоторые из них (device.company.com) в моих списках устройств. Мне нужно только имя устройства и IP-адрес. так как я могу убрать доменное имя и имя субдомена из списка. и сохранить имя устройства и IP-адрес

device1.marketing.company.com 10.1.100.12

device2.marketing.company.com 10.1.100.13

device3.marketing.company.com 10.1.100.14

device4.marketing.company.com 10.1.100.15

device5.company.com 10.1.100.16

device6.company.com 10.1.100.17

device7.company.com 10.1.100.18

Результат, который я ищу

устройство1 10.1.100.12

устройство2 10.1.100.13

device3 10.1.100.14

device4 10.1.100.15

устройство5 10.1.100.16

device6 10.1.100.17

device7 10.1.100.18

спасибо,

Ответы [ 5 ]

1 голос
/ 08 марта 2011

Обновление 2

Использование sed '/\..* /s/\.[^ ]*//' ./devlist

Вход

$ cat ./devlist
device1.marketing.company.com 10.1.100.12
device2.marketing.company.com 10.1.100.13
device3.marketing.company.com 10.1.100.14
device4.marketing.company.com 10.1.100.15
device5.company.com 10.1.100.16
device6.company.com 10.1.100.17
device7.company.com 10.1.100.18
device8 10.1.100.19

Выход

$ sed '/\..* /s/\.[^ ]*//' ./devlist
device1 10.1.100.12
device2 10.1.100.13
device3 10.1.100.14
device4 10.1.100.15
device5 10.1.100.16
device6 10.1.100.17
device7 10.1.100.18
device8 10.1.100.19
0 голосов
/ 08 марта 2011
sed 's/\([^.]*\)\..* \(.*\)/\1 \2/'

Объяснение ниже

\(        #Start remembering
[^.]*     #A collection of things that don't include periods
\)        #Stop remembering
\..*      #A period, anything else, and finally a space
\(.*\)    #Remember everything after the space
/\1 \2/   #Print out the first section remembered, a space, and the second section
0 голосов
/ 08 марта 2011

Лучше использовать awk вместо sed / cut.

$ cat devicefile
device1.marketing.com
device2.marketing.company.com 10.1.100.1
device3.marketing.company.com 10.1.100.2
device4.marketing.company.com 10.1.100.3

$ awk '{split($1,a,".");$1=a[1]}1' devicefile
device1
device2 10.1.100.1
device3 10.1.100.2
device4 10.1.100.3
0 голосов
/ 08 марта 2011

вырез является отличным инструментом для этого.

me@server:~$ echo hi.com | cut -d"."  -f1 
hi 
me@server:~$ echo higher.hi.com | cut -d"." -f1 
higher
me@server:~$ 

-d дает разделитель. По умолчанию разделителем является вкладка -f дает поле для использования. Индексирование столбцов на основе 1.

0 голосов
/ 08 марта 2011

Вы можете вывести имя устройства в отдельный список. Что-то под влиянием "^ (\ w *) [.]. * $"

Например, если вы хотите использовать sed:

sed 's/^\(\w*\)[.].*$/\1/' listfile.txt > output.txt

Разбить выражение:

  • s / Мы используем sed (честно говоря, не уверен что это делает)
  • ^ Начало строка с
  • \ (\) Побег скобки. Любой образец, найденный между они могут быть получены с заполнитель \ 1
  • \ w * Любой буквенно-цифровой символ [A-Za-z0-9 _]
  • [.] Буквальный период
  • $ Отмечает конец строки
  • / Отделяет шаблон поиска от шаблона результата
  • \ 1 Получает заполнитель для сопоставленного шаблона между скобками \ ( и \)
  • / Завершает выражение sed
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...