Вы можете разрезать входной файл с помощью 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"
Я пробовал что-то вроде этого, чтобы получить то, что вы хотите:
sed 's/[^\"]*\"\([^\"]*\)\"[^\"]*/\1\n/g' input.txt > out.txt
Он ищет подстроки в двойных кавычках (но не помещает их внутри) и получает все такие подстроки из каждой строки в файле input.txt. {{1} } В качестве разделителя используется новая строка '\ n'.