Вывод для обрезки команды grep

Я использовал эту команду, которая будет произведена, Но я хочу сократить вывод для наблюдения вниз обрезанного конечного результата

Результат потребовал:

EsbDwMarkDownAdbSub "CleClient" "3.1"
EsbDwMarkDownAdbSub "Encrypter" "1.0"

Команда:

grep --color -H -r "__GLOBAL_SUBSTITUTION_VARIABLE__Environment/LibraryVersions" /opt/tibco/product/tra/domain/WFM-DEV 2>/dev/null

Вывод, который я в настоящее время вижу:

/opt/tibco/product/tra/domain/WFM-DEV/data/EsbDwMarkDownAdbSub.dat:       <instanceInfoPropertyname="__GLOBAL_SUBSTITUTION_VARIABLE__Environment/LibraryVersions/CleClient" value="3.1"/>
/opt/tibco/product/tra/domain/WFM-DEV/data/EsbDwMarkDownAdbSub.dat:    <instanceInfoProperty name="__GLOBAL_SUBSTITUTION_VARIABLE__Environment/LibraryVersions/Encrypter" value="1.0"/>
3
задан 20 December 2016 в 03:58

2 ответа

Вы могли, например, передать результат по каналу в sed (возможно, мы могли дать Вам более изящный способ знать, Ваш фактический вход) - добавляют это в конец Вашего grep команда:

| sed -r 's#.*/(EsbDw[^\.]+).*/([^"]+").*=([^/]+)/>#\1 "\2 \3#'
EsbDwMarkDownAdbSub "CleClient" "3.1"
EsbDwMarkDownAdbSub "Encrypter" "1.0"
  • -r используйте ДО, таким образом, мы не должны выходить () и +
  • s#old#new# замена old с new
  • .*/ любые символы прежде a /
  • (EsbDw[^\.]+) найдите шаблон, запускающийся с EsbDw и окончание a . и сохраните все перед .
  • /([^"]+") любые символы между / и " - сохраните все после / включая "
  • =([^/]+)/> сохраните то, что прибывает между = и />
  • \1 "\2 \3 три сохраненных шаблона с пробелами между ними (и добавление того ")
3
ответ дан 1 December 2019 в 15:23

Желаемый вывод может быть сделан довольно легко с Python2:

$ ./trim_lines.py < input.txt                                                                                            
EsbDwMarkDownAdbSub "CleClient" "3.1"
EsbDwMarkDownAdbSub "Encrypter" "1.0"

Содержание trim_lines.py сценарий:

#!/usr/bin/env python
import sys,os,re

for line in sys.stdin:
    words=line.strip().split()
    val1 = os.path.basename(words[0]).split(".")[0]
    val2 = '"' + os.path.basename(words[2])
    val3 = re.split("[=/]",words[-1])[1]
    print val1,val2,val3

Что происходит, здесь довольно просто. Мы используем < перенаправить содержание входного файла к сценарию (в Вашем случае, где введено прибывая из grep используют канал ...| ./trim_lines.py отправить вывод от grep к сценарию). Циклы сценария по всем строкам, которые прибывают в его stdin поток, разделяют каждую строку на слова и дополнительно фильтруют те слова с помощью некоторых созданных в модулях, такой как os.path и re. Сначала два значения мы получаем использование os.path.basename(), и продержитесь, каждый использует re.split() сломать последнюю строку в нескольких разделителях. Существует много вещей, продолжающихся здесь, но верьте мне - это довольно просто.

3
ответ дан 1 December 2019 в 15:23

Другие вопросы по тегам:

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