可以通过简单的方式替换字符串(sed)限制在两个字符串内吗?
示例
我有xml提要包含许多标签,包括带有特殊字符的标签。
我只需要在这个标记中更改特殊字符。我的意思是<到<,"到"等等。
<#>来源
Konvice s pokličkou smalt je vhodná ke každodennímu použití. Lze ji mýt v myčce na nádobí a je vhodná pro plynové, elektrické sporáky a indukci. Objem 2 l, v červené barvě s bílým puntíkem. <#>结果
<p>Konvice s pokličkou smalt je vhodná ke každodennímu použití. Lze ji mýt v myčce na nádobí a je vhodná pro plynové, elektrické sporáky a indukci. Objem 2 l, v červené barvě s bílým puntíkem.</p><p> </p><p> </p>或者是另一种“修复”xml的方法?
谢谢。
<#>更新
它可以工作,但是对于大多数xml标记,甚至对xml也是如此。:/
<?xml version="1.0" encoding="utf-8"?>
2021-02-05T14:15:02+01:00
ABF644B
LÁHEV NA VODU "BISFREE ECO" 550ML, HNĚDÁ
Láhev na vodu "Bisfree Eco". Díky barevné plastové láhvi na vodu lock budete mít o množství vypitých tekutin přehled. Malá velikost s objemem 550 ml s víčkem se totiž vleze do každé tašky či kabelky a vodu tak můžete mít stále při sobě. Láhev je vyrobená z Tritanu - lehký, odolný proti nárazům a kvalitní plast - neobsahuje BPA. Tritan je populární náhražka skla. Barva hnědá. Rozměry - 6,5×6,5×22 cm
https://b2b.utc.cz/lahev-na-vodu-bisfree-eco-550ml-hneda/347058p/
https://b2b.utc.cz/bin/product/4/ABF644B.jpg
199.00
164.46
LOCKNLOCK
STOLOVÁNÍ | PŘÍPRAVA NÁPOJŮ | SPORTOVNÍ LAHVE
8803733138772
199.00
ABF644G
LÁHEV NA VODU "BISFREE ECO" 550ML, ZELENÁ
Láhev na vodu "Bisfree Eco". Díky barevné plastové láhvi na vodu lock budete mít o množství vypitých tekutin přehled. Malá velikost s objemem 550 ml s víčkem se totiž vleze do každé tašky či kabelky a vodu tak můžete mít stále při sobě. Láhev je vyrobená z Tritanu - lehký, odolný proti nárazům a kvalitní plast - neobsahuje BPA. Tritan je populární náhražka skla. Barva zelená. Rozměry - 6,5×6,5×22 cm
https://b2b.utc.cz/lahev-na-vodu-bisfree-eco-550ml-zelena/347057p/
https://b2b.utc.cz/bin/product/4/ABF644G.jpg
...应该是这样的。
2021-02-05T14:19:48+01:00
ABF644B
LÁHEV NA VODU "BISFREE ECO" 550ML, HNĚDÁ
<p>Konvice s pokličkou smalt je vhodná ke každodennímu použití. Lze ji mýt v myčce na nádobí a je vhodná pro plynové, elektrické sporáky a indukci. Objem 2 l, v červené barvě s bílým puntíkem.</p><p> </p><p> </p>
https://b2b.utc.cz/lahev-na-vodu-bisfree-eco-550ml-hneda/347058p/
https://b2b.utc.cz/bin/product/4/ABF644B.jpg
199.00
164.46
LOCKNLOCK
STOLOVÁNÍ | PŘÍPRAVA NÁPOJŮ | SPORTOVNÍ LAHVE
8803733138772
199.00
...发布于 2021-02-04 13:17:23
尝试一下,您需要安装recode包:
sudo apt install recodeMake是原始文件的备份。
到目前为止,我已经做到了这一点:
守则:
#!/bin/bash
# create a function to parse the files
f() {
# get the original text between the tags inside DESCRIPTION
decoded="$(sed -n '//p;' "$1" | sed 's:<\([^>]*\)>::g' | sed 's/^[[:blank:]]*\|[[:blank:]]*$//g')"
# get the encoded text from the decoded text
encoded="$(echo "$decoded" | recode ..html | sed 's:<DESCRIPTION>\(.*\)</DESCRIPTION>:\1:')"
# encode everything inside DESCRIPTION to temporal file
awk '/DESCRIPTION/{"echo \""$0"\" | recode ..html" | getline $0;}1' "$1" > output.xml
# replace the encoded with the decoded
[[ ! -z "$encoded" ]] && sed -i "s/$encoded/$decoded/" output.xml
# decode DESCRIPTION tags
sed "s:<\([^;]*\)DESCRIPTION>:<\1DESCRIPTION>:g" output.xml >> result.xml
}
# create result file
> result.xml
# split the source file into chunks
csplit --suffix-format="%d.FOO" file.xml '//' '{*}' 2>&1 > /dev/null
# loop over the "chunk" files
for i in *.FOO; do
# apply the function to the "chunk" file
f "$i"
# remove "chunk" file
rm "$i"
done
# remove temporal file
rm output.xml然后:
$ cat result.xml2021-02-05T14:19:48+01:00
ABF644B
LÁHEV NA VODU "BISFREE ECO" 550ML, HNĚDÁ
<p>Konvice s pokličkou smalt je vhodná ke každodennímu použití. Lze ji mýt v myčce na nádobí a je vhodná pro plynové, elektrické sporáky a indukci. Objem 2 l, v červené barvě s bílým puntíkem.</p><p> </p><p> </p>
https://b2b.utc.cz/lahev-na-vodu-bisfree-eco-550ml-hneda/347058p/
https://b2b.utc.cz/bin/product/4/ABF644B.jpg
199.00
164.46
LOCKNLOCK
STOLOVÁNÍ | PŘÍPRAVA NÁPOJŮ | SPORTOVNÍ LAHVE
8803733138772
199.00https://askubuntu.com/questions/1313562
复制相似问题