linux + как получить значения из файла xml [дубликат]

-2
23.01.2017, 22:28
2 ответа

Вы можете разрезать входной файл с помощью awk следующим образом:

gv@debian:$ cat a.txt
<app name="UAT/ECC/Global/MES/1206/MRP-S23"   ear="UAT/ECC/Global/MES/1206/MRP-S23.ear" xml="UAT/ECC/Glal/ME/120/MRP-  S23.xml"/>
<app name="OQ/ediedbn/adSFSF/adSFSF-CL" ear="OQ/ebn/aSF/adSF- CL.ear"  xml="OQ/ediedbn/adSFSF/adSSF-CL.xml"/>
<app name="OQ/ediedbn/adaEBS/adOrBS-HR-CL"  ear="OQ/ediedbn/adOraS/araEBS- HR-CL.ear" xml="OQ/eddbn/aOraEBS/adOEBS-   HR-CL.xml"/>
<app name="UAT/CZ/LIMS/T068_01/LIMS-QA-S03" ear="UAT/CZ/LIS/T068_01/LIS-QA-     .ear" xml="UAT/CZ/LIMS/T068_01/LIMS-QA-S03.xml"/>

gv@debian:$ cat b.txt

gv@debian:$ awk -F"name=|ear=|xml=|/>" '{print $2} {print $4}' a.txt >b.txt

gv@debian:$ cat b.txt
"UAT/ECC/Global/MES/1206/MRP-S23"   
"UAT/ECC/Glal/ME/120/MRP-  S23.xml"
"OQ/ediedbn/adSFSF/adSFSF-CL" 
"OQ/ediedbn/adSFSF/adSSF-CL.xml"
"OQ/ediedbn/adaEBS/adOrBS-HR-CL"  
"OQ/eddbn/aOraEBS/adOEBS-   HR-CL.xml"
"UAT/CZ/LIMS/T068_01/LIMS-QA-S03" 
"UAT/CZ/LIMS/T068_01/LIMS-QA-S03.xml"

Если вы не хотите сохранять двойные кавычки, вы можете удалить их с помощью sed следующим образом:

gv@debian:$ sed -i 's/\"//g' b.txt
gv@debian:$ cat b.txt
UAT/ECC/Global/MES/1206/MRP-S23   
UAT/ECC/Glal/ME/120/MRP-  S23.xml
OQ/ediedbn/adSFSF/adSFSF-CL 
OQ/ediedbn/adSFSF/adSSF-CL.xml
OQ/ediedbn/adaEBS/adOrBS-HR-CL  
OQ/eddbn/aOraEBS/adOEBS-   HR-CL.xml
UAT/CZ/LIMS/T068_01/LIMS-QA-S03 
UAT/CZ/LIMS/T068_01/LIMS-QA-S03.xml

Или в одном лайнере перенаправьте awk в sed:

gv@debian:$ awk -F"name=|ear=|xml=|/>" '{print $2} {print $4}' a.txt |sed 's/\"//g' >b.txt

Совет: если вы хотите, чтобы все поля в каждой строке входного файла записывались в выходной файл в одну строку, используйте {print $ 2 $ 4} (поместите поля в одинаковые скобки).

Ключ, с которым работает этот метод awk, заключается в том, что awk может принимать разделители из нескольких символов, а также несколько разделителей, разделенных символом | (= или).
разделители awk определяются опцией -F

Если вам нужно сохранить значения уха, замените {print $ 4} на {print $ 3}.

Чтобы получить представление об этом нарезке awk, просмотрите все поля, разделенные awk:

$ awk -F"name=|ear=|xml=|/>" '{print "Field1="$1} {print "Field2="$2} {print "Field3="$3} {print "Field4="$4}' a.txt
Field1=<app 
Field2="UAT/ECC/Global/MES/1206/MRP-S23"   
Field3="UAT/ECC/Global/MES/1206/MRP-S23.ear" 
Field4="UAT/ECC/Glal/ME/120/MRP-  S23.xml"
Field1=<app 
Field2="OQ/ediedbn/adSFSF/adSFSF-CL" 
Field3="OQ/ebn/aSF/adSF- CL.ear"  
Field4="OQ/ediedbn/adSFSF/adSSF-CL.xml"
Field1=<app 
Field2="OQ/ediedbn/adaEBS/adOrBS-HR-CL"  
Field3="OQ/ediedbn/adOraS/araEBS- HR-CL.ear" 
Field4="OQ/eddbn/aOraEBS/adOEBS-   HR-CL.xml"
Field1=<app 
Field2="UAT/CZ/LIMS/T068_01/LIMS-QA-S03" 
Field3="UAT/CZ/LIS/T068_01/LIS-QA-     .ear" 
Field4="UAT/CZ/LIMS/T068_01/LIMS-QA-S03.xml"
0
28.01.2020, 05:18

Я пробовал что-то вроде этого, чтобы получить то, что вы хотите:

sed 's/[^\"]*\"\([^\"]*\)\"[^\"]*/\1\n/g' input.txt > out.txt

Он ищет подстроки в двойных кавычках (но не помещает их внутри) и получает все такие подстроки из каждой строки в файле input.txt. {{1} } В качестве разделителя используется новая строка '\ n'.

0
28.01.2020, 05:18

Теги

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