Я использовал эту команду, которая будет произведена, Но я хочу сократить вывод для наблюдения вниз обрезанного конечного результата
Результат потребовал:
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"/>
Вы могли, например, передать результат по каналу в 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
три сохраненных шаблона с пробелами между ними (и добавление того "
)Желаемый вывод может быть сделан довольно легко с 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()
сломать последнюю строку в нескольких разделителях. Существует много вещей, продолжающихся здесь, но верьте мне - это довольно просто.