имя устройства grep и ищет следующее значение:

Для неупомянутого примера, каждого \\ пара передает одну обратную косую черту grep, таким образом, 4 обратных косых черты передают два grep, который переводит в единственную обратную косую черту. 6 обратных косых черт передают три grep, переводя в одну обратную косую черту и один \c, который равен c. Одна дополнительная обратная косая черта ничего не изменяет, потому что она переводится \c -> c оболочкой. Восемь обратных косых черт в оболочке четыре в grep, переведенном в два, таким образом, это больше не соответствует.

Для примера в двойных кавычках отметьте то, что следует за Вашей второй кавычкой из страницы справочника удара:

Обратная косая черта сохраняет свое особое значение только при сопровождении одним из следующих символов: $'", \, или новая строка.

Т.е. когда Вы даете нечетное число обратных косых черт, концов последовательности в \c, который был бы равен c в неупомянутом случае, но при заключении в кавычки обратная косая черта освобождает свое особое значение, таким образом, \c передается grep. Именно поэтому диапазон "возможных" обратных косых черт (т.е. те, которые составляют сопоставление с образцом Ваш файл в качестве примера) скатывается одним.

3
29.11.2012, 10:43
5 ответов

Я более доволен awk, таким образом, я хотел бы представить два решения в awk.

Решение 1

$ echo abc,10.11.13.14,def,1.2.3.4,geh,6.7.54.23 | awk -F, '{for (i=1; i<NF; i+=2) if ($i == "def") print $(i+1)}'
1.2.3.4

В этом случае я ищу название машины "определение", если найдено, распечатайте следующий столбец.

Решение 2

$ echo abc,10.11.13.14,def,1.2.3.4,geh,6.7.54.23 | tr , \\n | awk '/def/ {getline;print}'
1.2.3.4

В этом решении я использую tr управляйте, чтобы преобразовать запятые в новую строку, поиск "определения" и распечатать строку, которая следует. Я надеюсь что эти решения работа для Вас.

3
27.01.2020, 21:11
  • 1
    для Вашей доброй помощи оба, которые решение работало в моем случае.... –  user28011 29.11.2012, 11:29

Принятие Вас имеет GNU grep с совместимыми с Perl регулярными выражениями:

device="def"
grep -oP '(?<=\b'"$device"',).*?(?=,|$)'

Что означает: найдите содержание между "определением" на одной стороне и "запятой или концом строки" на другом

Править: добавленный граница слова к РЕ для нахождения данного устройства более точно.

3
27.01.2020, 21:11
  • 1
    , Что, если существует оба a def и xdef устройство? –  Stéphane Chazelas 29.11.2012, 23:35
  • 2
    @StephaneChazelas (?:(?<=,def,)|(?<=^def,)) –  Gilles 'SO- stop being evil' 30.11.2012, 00:43

Не используя команды, но оболочки builtins:

string='abc,10.11.13.14,def,1.2.3.4,geh,6.7.54.23'
dev=def

s=,$string,
case $s in
  (*,"$dev",*) ip=${s#*",$dev,"}; ip=${ip%%,*};;
  (*) ip=unknown
esac

printf '%s\n' "$ip"

С zsh легко отобразить ту строку на ассоциативный массив:

string='abc,10.11.13.14,def,1.2.3.4,geh,6.7.54.23'
typeset -A ip
ip=(${(s:,:)string})
print -r -- $ip[def]
1
27.01.2020, 21:11

Используя grep (GNU) и сокращение:

$ echo abc,10.11.13.14,def,1.2.3.4,geh,6.7.54.23 | grep -o 'abc,[^,]*'  | cut -d, -f2
10.11.13.14
1
27.01.2020, 21:11
  • 1
    Спасибо за Гуру ответа, но его показ для a.... Каково значение a? –  user28011 29.11.2012, 11:31
  • 2
    ohh.. у меня есть эта привычка к использованию имен файлов как a, b, и т.д.. его просто имя файла.. удаление его.... –  Guru 29.11.2012, 11:34
  • 3
    You имеет двойную кавычку " это не должно быть там. –  Hai Vu 29.11.2012, 16:19
  • 4
    проблемы редактирования в последнюю минуту :) Hai Vu спасибо. –  Guru 29.11.2012, 16:21

Замените каждым IP-адресом [0-9\.]\{7,15\} использование sed. IP-адрес состоит из чисел и точек, варьирующихся от 7 до 15 положений.

Замените каждый IP-адрес собой сопровождаемый новой строкой \n, который в основном означает, что каждое устройство, комбинация IP будет иметь свою собственную строку.

echo "abc,10.11.13.14,def,1.2.3.4,geh,6.7.54.23" | sed 's/\([0-9\.]\{7,15\}\),/\1\n/g' 
abc,10.11.13.14
def,1.2.3.4
geh,6.7.54.23


echo "abc,10.11.13.14,def,1.2.3.4,geh,6.7.54.23" | sed 's/\([0-9\.]\{7,15\}\),/\1\n/g'  | grep def
def,1.2.3.4
0
27.01.2020, 21:11

Теги

Похожие вопросы