Я ищу, чтобы автоматизировать что-то с помощью сценария в Bash или Python.
Допустим, у меня есть файл конфигурации с устройства. Простой файл config.txt. Контент может быть таким (реальный файл намного длиннее и содержит гораздо больше текста):
> cat config.txt
>
> ASA Version 9.1(5)
> !
> terminal width 511
> hostname confidential
> domain-name confidential
> enable password encrypted
> passwd encrypted
> names
> !
> interface GigabitEthernet0/0
> nameif interconnection
> security-level 50
> ip address 1.1.1.1 255.255.255.240 standby 1.1.1.1
> !
> interface GigabitEthernet0/1
> description Trunk
> no nameif
> no security-level
> no ip address
> !
> interface GigabitEthernet0/1.4
> description confidential
> vlan 4
> nameif vlan004_confidential
> security-level 50
> ip address 1.1.1.1 255.255.255.0
> !
> object network confidential
> host 2.2.2.2
> object network confidential2
> host 3.3.3.3
> object network confidential3
> host 4.4.4.4
>!
>access-list vlan65_access_in extended permit object-group confidential any object-group confidential
>access-list vlan65_access_in remark Allow ICMP OK-20131105
>access-list vlan65_access_in extended permit icmp any object vlan48-confidential
>access-list vlan65_access_in remark Allow NTP OK-20131105
>access-list vlan65_access_in extended permit udp any object-group confidential eq ntp
>access-list warehouse_access_in remark Access to confidential
>access-list warehouse_access_in extended permit object-group confidential any object-group confidential
>access-list warehouse_access_in remark Access to DNS srvrs
>access-list warehouse_access_in extended permit ip any object-group DNS_Servers
>access-list warehouse_access_in remark Allow acces to AD
>!
>no pager
>logging enable
>logging timestamp
>logging standby
>logging list SysLogs message 304001
>logging list connections message 302013-302304
>logging list NewConnection message 302303
>logging list NewConnection message 302015
>logging list NewConnection message 302013
>logging list NewConnection message 303002
>logging list Dropped message 106001-106103
>logging list ConfigChange message 111008
>logging list ConfigChange message 111001
>logging list ConfigChange message 111010
>logging buffer-size 1048576
>logging monitor debugging
>logging buffered warnings
>!
>access-group vlan4_access_in in interface vlan004_confidential1
>access-group vlan65_access_in in interface vlan065_confidential2
>access-group vlan66_access_in in interface vlan066_confidential3
>access-group vlan80_access_in in interface vlan080_confidential4
>!
>service-policy global_policy global
>service-policy test interface interconnection
>service-policy imec_intranet_traffic-policy interface vlan065_confidential5
>service-policy imec_intranet_traffic-policy interface vlan066_confidential6
>service-policy imec_intranet_traffic-policy interface vlan080_confidential7
>service-policy imec_intranet_traffic-policy interface vlan082_confidential8
>service-policy imec_intranet_traffic-policy interface vlan083_confidential9
>!
>: end
Мой второй файл - это список (list.txt). А содержимое и макет примерно такие (в блокноте ++):
list.txt
>username full name employid group left comp on
>----------------------------------------------------------------------------------
>test16 confidential1 00014241 zzzz1 19-08-2017
>test38 confidential2 00014223 zzzz2 12-08-2017
>test47 confidential3 00013986 zzzz3 06-07-2017
>test85 confidential4 00013923 zzzz4 16-07-2017
Можно ли запустить скрипт, который берет каждое слово в столбце «имя пользователя» и «полное имя» в файле list.txt и проверяет, есть ли совпадение в файле config.txt? Было бы здорово иметь выходные данные сценария в третьем файле, в котором упоминается, какое слово (здесь имя пользователя или полное имя) находится в файле config.txt и где.
Допустим, я хочу знать, находится ли test38 где-нибудь в файле config.txt? Теперь я могу просто grep, но мой файл list.txt имеет около 100 пользователей. Я не хочу grep 100 раз. Кроме того, я получу больше списков в будущем.
grep -f
файлу со словами для поиска, может бытьgrep -FnH -f <( sed -nr 's/^>([[:alnum:]]+) +([[:alnum:]]+).*/\1\n\2/p' list.txt ) config.txt
.Ответы:
Вот Perl-скрипт, который делает эту работу (насколько я понимаю):
выходной файл для данного примера
источник
$users{$user} = $name ;
в$users{$user} = $name if $user and $name;
см мой выбор.Согласно моему личному пониманию вашего запроса, я использую встроенную команду
while
и командуawk
для ее решения.прямой вывод
записать вывод в файл
output.txt
выходной формат
Вывод результата
источник