在bash中,如何解析一个字符串以除去除两个标签之外的所有内容?

8 浏览
0 Comments

在bash中,如何解析一个字符串以除去除两个标签之外的所有内容?

将此内容标记为重复的用户没有抓住问题的关键,而他们提出的重复问题并不能充分回答这个问题。

这是一个示例字符串可能是这样的:

15iPadTimmy16iPhoneSpike

我想以某种方式解析它,最终只保留:

1516

因此,删除所有不在一个开头id标签和一个闭合id标签之间的内容,可能会有无限多个标签。(尽管更现实的上限情况可能是60,000)不过,至少会有1对标签。

我已经尝试使用sed来实现这个目的,但是这个语法的变化一点也没起作用:

sed 's/.*\(*\).*//'

非常感谢您提前的任何指导!

0
0 Comments

在这个问题中,用户想要解析一个字符串,只保留两个标签之间的内容,而去除其他部分。根据提供的内容,我们可以看出用户想要在给定的XML文件中提取出标签中的内容。

解决方法:

1. 使用xmllint和XPath查询来提取标签中的内容。可以通过将数据输入到input.xml文件中,然后使用以下命令来实现:

$ cat input.xml | xmllint --xpath '//id' -

2. 如果没有xmllint或更适合的工具可用,可以使用Perl、grep和sed命令来提取标签中的内容。可以通过以下命令来实现:

$ cat input.xml | perl -pe 's/(<.?id.)/\n$1/g' | grep '^<id>' | sed -e 's/$/<\/id>/'

3. 如果无法正确使用XPath查询,可以使用xmllint的--format选项将XML转换为易于使用基于行的工具的格式。可以通过以下命令来实现:

$ cat input.xml | xmllint --format - | grep '^\s*<id>'

通过使用上述解决方法,用户可以成功提取出两个标签之间的内容,同时去除其他部分。

0
0 Comments

原因:该问题的出现是因为用户需要使用bash来解析一个字符串,只保留两个标签之间的内容,并且需要使用sed命令来实现。

解决方法:用户可以使用下面的sed命令来解决该问题:

echo "$STRING" | sed 's/<\/id>.*/<\/id>/;s///;s///;'

该命令的输出结果将会是:

1516

该命令的工作原理如下:

1. 使用 `sed 's/<\/id>.*/<\/id>/'` 命令删除了 `<\/id>` 和 `` 标签之间的所有内容。

2. 使用 `sed 's///'` 命令删除了 `` 标签。

3. 使用 `sed 's///'` 命令删除了 `` 标签及其之间的内容。

希望这能帮到你。

用户回复:嘿,谢谢你的答案,通过一些简单的修改,这个方法将会非常好用 🙂 我没有列出我要解析的整个XML文件,但是我将在后端添加所有额外的标签。谢谢!

回答者回复:不客气,很高兴能帮到你。

0
0 Comments

问题的原因是用户想要在bash中解析一个字符串,只保留两个标签之间的内容。用户尝试了一种sed命令的方法,但是出现了一些问题。下面是对sed命令的一些调整建议:

sed 's=.*\(<id>.*</id>\).*=\1='

这里需要选择一个在命令表达式中不会出现的分隔符。因为关闭标签``中使用了`/`作为分隔符,所以我使用了`=`作为替代。

然后`*`修饰了紧接其后的正则表达式,表示"0个或多个"。你之前在`>`之后使用了`*`,表示"0个或多个右尖括号"。而你真正应该使用的是`.`,表示任意一个字符,所以带括号的表达式现在可以匹配整个``字段。

最后,`\1`表示将第一个带括号的子表达式的结果放入结果字符串中。

这种方法对于通用解决方案存在一些限制,但如果你知道每行只有一个ID字段,它应该能满足你的需求。

0