grep несколько шаблонов из ввода чтения - PullRequest
1 голос
/ 02 июля 2019

, поэтому я сделал bash-скрипт с именем gps хоста в перенаправленном файле.Тем не менее, существуют хосты с именами "-" или "_"

GTR_SRV123_EST GTR-SRV123-EST

Прямо сейчас, что я сделал, grep только часть полного доменного имениНапример, SRV123

Есть ли способ, с помощью которого я могу выполнить поиск хоста, даже если я просто введу полное доменное имя GTR_SRV123_EST , и он все равно будет соответствовать этому GTR-SRV123-EST .

У меня есть приглашение с запросом имени хоста:

echo -n "Please enter the host: "
read $host


grep -i $host ${temp}/*

update: так оно и работало с помощью команды Хуана.Тем не менее, путь к каталогу отображается на выходе.Как мне от него избавиться.

/export/home/aa12s/GLB-TXU/temp/

Токовый выход:

/export/home/aa12s/GLB-TXU/temp/GBL-ASA-A:100022FBC0D00038 gbl-asa-a-mode1 5005076801103673 active gbl-ac-wbg02

Желаемый вывод:

GBL-ASA-A:100022FBC0D00038 gbl-asa-a-mode1 5005076801103673 active gbl-ac-wbg02

Команда:

grep -iE "$(echo $host| awk -F '/export/home/aa12s/GLB-TXU/temp/' '{$2=$1;a=gsub(/_/, "-",$2); print $1"|"$2}' 2>/dev/null)" ${temp}/*

Ответы [ 4 ]

1 голос
/ 02 июля 2019

Отредактируйте ваш шаблон.

echo -n "Please enter the host: "
read host # Edit: not $host
host="${host//[_-]/\[_-\]}" # turn either into a *check* for either

grep -i "$host" ${temp}/*
0 голосов
/ 02 июля 2019

Если имя хоста отсутствует, и _, и - ниже будут работать.

Введенный хост содержит только _

grep -iE $(echo $host | tr "_" "-")\|$host ${temp}/*

Введенный хост содержит только -

grep -iE $(echo $host | tr "-" "_")\|$host ${temp}/*

Введенный хост содержит и _, и -

grep -iE $(echo $host | tr "_" "-")\|$(echo $host | tr "-" "_")\|$host ${temp}/*
0 голосов
/ 02 июля 2019

Вы можете использовать обратную ссылку:

([_-]) : capture either _ ou - in group 1
\1 : reference group 1

попробуйте эту команду:

grep -iE "([_-])$host\1" ${temp}/*

https://regex101.com/r/uH5SHC/1/

Wiyh host=SRV123, вы захватите:

  • GTR_SRV123_EST
  • GTR-SRV123-EST

а не

  • GTR_SRV123-EST
0 голосов
/ 02 июля 2019

Хаки , но попробуйте:

grep -Ei "$(echo $host| awk '{$2=$1;gsub(/_/, "-",$2);print $1"|"$2}' 2>/dev/null)" ${temp}/*

Чтобы избавиться от путей к файлам:

grep -iE "$(echo $host| awk '{$2=$1;gsub(/_/, "-",$2);print $1"|"$2}' 2>/dev/null)" ${temp}/* 2>/dev/null|awk -F \/ '{print $NF}'

ПРИМЕЧАНИЕ : косые черты НЕ должны присутствовать в содержимом файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...