我想通过插入变量来构造一个 xml 字符串:
str1="Hello"
str2="world"
xml='<?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2>'
echo $xml
Run Code Online (Sandbox Code Playgroud)
结果应该是
<?xml version="1.0" encoding="iso-8859-1"?><tag1>Hello</tag1><tag2>world</tag2>
Run Code Online (Sandbox Code Playgroud)
但我得到的是:
<?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2>
Run Code Online (Sandbox Code Playgroud)
我也试过
xml="<?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2>"
Run Code Online (Sandbox Code Playgroud)
但这会删除内部双引号并给出:
<?xml version=1.0 encoding=iso-8859-1?><tag1>hello</tag1><tag2>world</tag2>
Run Code Online (Sandbox Code Playgroud) 是否有一种简单的方法vi
可以使您的 XML 文本“漂亮”?
例如:
我要这个..
<person>
<name>Nick</name>
<age>26</age>
<gender>male</gender>
<occupation>doctor</occupation>
</person>
Run Code Online (Sandbox Code Playgroud)
成为这个...
<person>
<name>Nick</name>
<age>26</age>
<gender>male</gender>
<occupation>doctor</occupation>
</person>
Run Code Online (Sandbox Code Playgroud) 我想知道如何通过以下路径获取节点的值:
config/global/resources/default_setup/connection/host
config/global/resources/default_setup/connection/username
config/global/resources/default_setup/connection/password
config/global/resources/default_setup/connection/dbname
Run Code Online (Sandbox Code Playgroud)
来自以下 XML:
<?xml version="1.0"?>
<config>
<global>
<install>
<date><![CDATA[Tue, 11 Dec 2012 12:31:25 +0000]]></date>
</install>
<crypt>
<key><![CDATA[70e75d7969b900b696785f2f81ecb430]]></key>
</crypt>
<disable_local_modules>false</disable_local_modules>
<resources>
<db>
<table_prefix><![CDATA[]]></table_prefix>
</db>
<default_setup>
<connection>
<host><![CDATA[localhost]]></host>
<username><![CDATA[root]]></username>
<password><![CDATA[pass123]]></password>
<dbname><![CDATA[testdb]]></dbname>
<initStatements><![CDATA[SET NAMES utf8]]></initStatements>
<model><![CDATA[mysql4]]></model>
<type><![CDATA[pdo_mysql]]></type>
<pdoType><![CDATA[]]></pdoType>
<active>1</active>
</connection>
</default_setup>
</resources>
<session_save><![CDATA[files]]></session_save>
</global>
<admin>
<routers>
<adminhtml>
<args>
<frontName><![CDATA[admin]]></frontName>
</args>
</adminhtml>
</routers>
</admin>
</config>
Run Code Online (Sandbox Code Playgroud)
我还想将该值分配给变量以供进一步使用。让我知道你的想法。
是否有快捷方式可以从 跳转,例如跳转<XX>
到</XX>
?
我已经尝试使用 '%' ,但它不适用于这种情况。
我已经阅读了 diff 和 patch,但我不知道如何应用我需要的东西。我想它很简单,所以为了显示我的问题,请使用这两个文件:
一个.xml
<resources>
<color name="same_in_b">#AAABBB</color>
<color name="not_in_b">#AAAAAA</color>
<color name="in_b_but_different_val">#AAAAAA</color>
<color name="not_in_b_too">#AAAAAA</color>
</resources>
Run Code Online (Sandbox Code Playgroud)
xml文件
<resources>
<color name="same_in_b">#AAABBB</color>
<color name="in_b_but_different_val">#BBBBBB</color>
<color name="not_in_a">#AAAAAA</color>
</resources>
Run Code Online (Sandbox Code Playgroud)
我想要一个输出,看起来像这样(顺序无关紧要):
<resources>
<color name="same_in_b">#AAABBB</color>
<color name="not_in_b">#AAAAAA</color>
<color name="in_b_but_different_val">#BBBBBB</color>
<color name="not_in_b_too">#AAAAAA</color>
<color name="not_in_a">#AAAAAA</color>
</resources>
Run Code Online (Sandbox Code Playgroud)
合并应包含符合此简单规则的所有行:
我想在 bash 脚本中应用这个任务,所以如果另一个程序更适合,它不一定需要完成差异和补丁
我正在尝试转换
<id>1</id>
<Name>ENTERPRISE RESOURCE PLANNING</Name>
Run Code Online (Sandbox Code Playgroud)
到:
<column name="id">1</column>
<column name="Name">ENTERPRISE RESOURCE PLANNING</column>
Run Code Online (Sandbox Code Playgroud)
我假设这项工作的最佳工具是sed
,但是我无法弄清楚如何将原始文本的一部分保留在替换部分中。
如果我做:
$ sed -i 's/<.*>.*<.*>/<column name="\\1">\\2<\/column>/g' filename.xml
Run Code Online (Sandbox Code Playgroud)
输出是:
<column name="\1">\2</column>
<column name="\1">\2</column>
Run Code Online (Sandbox Code Playgroud)
或者从 inside 做类似的事情vi
,它输出:
<column name=""></column>
<column name=""></column>
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点,\1
并被\2
替换回它们的原始值?
我正在处理分散在嵌套目录结构中的大量 XML 文件。
我尝试了以下方法:
$ find . -name "*.xml" -type f | xargs -- xmllint --format
Run Code Online (Sandbox Code Playgroud)
问题是在屏幕上生成格式化的 XML 输出,但不会更改文件。
如何更改此命令以更改实际文件内容?
使用 Bash,
文件:
<?xml version="1.0" encoding="UTF-8"?>
<blah>
<blah1 path="er" name="andy" remote="origin" branch="master" tag="true" />
<blah1 path="er/er1" name="Roger" remote="origin" branch="childbranch" tag="true" />
<blah1 path="er/er2" name="Steven" remote="origin" branch="master" tag="true" />
</blah>
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法:
grep -i 'name="andy" remote="origin" branch=".*\"' <filename>
Run Code Online (Sandbox Code Playgroud)
但它返回整行:
<blah1 path="er" name="andy" remote="origin" branch="master" tag="true" />
Run Code Online (Sandbox Code Playgroud)
我想根据以下内容匹配该行:
name="andy"
Run Code Online (Sandbox Code Playgroud)
我只想让它返回:
master
Run Code Online (Sandbox Code Playgroud) Unix 环境有一些优秀的工具可以解析各种形式的文本。但是,最近,数据不再采用以前的传统(历史)格式(CSV、TSV、基于记录或其他一些基于分隔符的格式)。如今,数据以 XML/JSON 等结构化格式进行交换。
我知道有一些很好的工具,比如 sed、awk 和 Perl,它们几乎可以处理任何形式的数据。但是,要处理这种结构化数据,通常必须编写一个完整的程序,而且由于可用于提取信息的时间很少,因此必须坐下来弄清楚要查询和放置的内容的整个逻辑以编程方式将其关闭。有时这是不行的——主要是因为从这些文件中提取的信息作为进一步工作的输入;还因为搜索适当的解决方案并对其进行编码需要时间。需要一个带有足够开关的命令行工具来查找、查询和转储数据。
我正在寻找采用 XML/JSON 或其他形式的结构化数据并将其转储为其他格式(如 csv 等)的工具,以便从那里可以使用其他命令从中获取任何信息。
是否有任何命令行实用程序可以完成此类工作?是否已经有可用的 awk/Perl 脚本?
我有两个文件具有相同的数据但在不同的行中。
文件 1:
<Identities>
<Identity>
<Id>048206031415072010Comcast.USR8JR</Id>
<UID>ccp_test_79</UID>
<DisplayName>JOSH CCP</DisplayName>
<FirstName>JOSH</FirstName>
<LastName>CCP</LastName>
<Role>P</Role>
<LoginStatus>C</LoginStatus>
</Identity>
<Identity>
<Id>089612381523032011Comcast.USR1JR</Id>
<UID>94701_account1</UID>
<DisplayName>account1</DisplayName>
<FirstName>account1</FirstName>
<LastName>94701</LastName>
<Role>S</Role>
<LoginStatus>C</LoginStatus>
</Identity>
</Identities>
Run Code Online (Sandbox Code Playgroud)
文件 2:
<Identities>
<Identity>
<Id>089612381523032011Comcast.USR1JR</Id>
<UID>94701_account1</UID>
<DisplayName>account1</DisplayName>
<FirstName>account1</FirstName>
<LastName>94701</LastName>
<Role>S</Role>
<LoginStatus>C</LoginStatus>
</Identity>
<Identity>
<Id>048206031415072010Comcast.USR8JR</Id>
<UID>ccp_test_79</UID>
<DisplayName>JOSH CCP</DisplayName>
<FirstName>JOSH</FirstName>
<LastName>CCP</LastName>
<Role>P</Role>
<LoginStatus>C</LoginStatus>
</Identity>
</Identities>
Run Code Online (Sandbox Code Playgroud)
如果我使用diff file1 file2
命令,我会得到以下响应:
1,10d0
< <Identities>
< <Identity>
< <Id>048206031415072010Comcast.USR8JR</Id>
< <UID>ccp_test_79</UID>
< <DisplayName>JOSH CCP</DisplayName>
< <FirstName>JOSH</FirstName>
< <LastName>CCP</LastName>
< <Role>P</Role>
< <LoginStatus>C</LoginStatus>
< </Identity>
20a11,20
> <Identities>
> <Identity>
> …
Run Code Online (Sandbox Code Playgroud)