我是bash脚本新手。
我在文件alpha.xml中有xml标签,为
<tab>
<enabled>false</enabled>
</tab>
<tabToChange>
<enabled>false</enabled>
</tabToChange >
我试图将其改为
<tab>
<enabled>false</enabled>
</tab>
<tabToChange>
<enabled>true</enabled>
</tabToChange >
引用https://unix.stackexchange.com/questions/26284/how-can-i-use-sed-to-replace-a-multi-line-string
我试过命令
sed '/^tabToChange$/ {N; s/\<tabToChange\>n\<enabled\>/yo/g}' alpha.txt
sed '/^\<<tabToChange>\>$/ {N; s/\<<tabToChange>\>\n\<enabled\>/yo/g}' alpha.txt
sed '/^\<\<tabToChange\>\>$/ {N; s/\<\<tabToChange\>\>\n\<\<enabled\>\>/yo/g}' alpha.txt
它们都不起作用。有人可以帮助我吗
答案 0 :(得分:2)
要操纵XML文档,请使用XML解析器/工具
我会使用xmlstarlet工具。
假设输入XML数据包含在父sqoop import --connect jdbc:mysql://localhost:3306/sqoopdatabase --username sqoopuser --P --table employee -m 1 --hive-database hivelearning --hive-import --hive-drop-import-delims
标记中(您将拥有自己的标记):
<root>
命令:
<root>
<tab>
<enabled>false</enabled>
</tab>
<tabToChange>
<enabled>false</enabled>
</tabToChange >
</root>
输出:
xmlstarlet ed -u "//tabToChange/enabled" -v true alpha.xml
<?xml version="1.0"?>
<root>
<tab>
<enabled>false</enabled>
</tab>
<tabToChange>
<enabled>true</enabled>
</tabToChange>
</root>
- 编辑模式
ed
- 更新值
-u
- 匹配所需元素的xpath表达式
"//tabToChange/enabled"
- 要设置的值
答案 1 :(得分:0)
我同意使用适当工具的建议。 但只是为了sed的乐趣:
sed "/tabToChange/{N;s/\(tabToChange>\n<enabled>\)false\(<\/enabled>\)/\1true\2/;}" alpha.txt
<
和>
\n
N
答案 2 :(得分:0)
您可以使用以下命令执行此操作。
<rss xmlns:a10="http://www.w3.org/2005/Atom" version="2.0">
<channel>
<title>title/title>
<link>link</link>
<description>news</description>
<item>
<guid isPermaLink="true">link</guid>
<link>link</link>
<title>Tiele</title>
<description>Descr</description>
<enclosure url="image" type="image/jpeg"/>
<a10:updated>2017-05-07T09:14:00+03:00</a10:updated>
</item>
</channel>
</rss>
让您在想要替换的任何行之前尊重空间。那就是我们有
cat alpha.xml | tr '\n' '\f' | sed -e '0,/<tab>\f<enabled>false<\/enabled>\f<\/tab>\f<tabToChange>\f<enabled>false<\/enabled>\f<\/tabToChange >/s//<tab>\f<enabled>false<\/enabled>\f<\/tab>\f<tabToChange>\f<enabled>true<\/enabled>\f<\/tabToChange >/' | tr '\f' '\n' > alpha1.xml
cp alpha1.xml alpha.xml
rm alpha1.xml
我们要用
替换<tab>
<enabled>false</enabled>
</tab>
<tabToChange>
<enabled>false</enabled>
</tabToChange >
要使用的命令是:
<tab>
<enabled>false</enabled>
</tab>
<tabToChange>
<enabled>true</enabled>
</tabToChange >
请注意,我们尊重cat alpha.xml | tr '\n' '\f' | sed -e '0,/<tab>\f <enabled>false<\/enabled>\f<\/tab>\f<tabToChange>\f <enabled>false<\/enabled>\f<\/tabToChange >/s//<tab>\f <enabled>false<\/enabled>\f<\/tab>\f<tabToChange>\f <enabled>true<\/enabled>\f<\/tabToChange >/' | tr '\f' '\n' > alpha1.xml
cp alpha1.xml alpha.xml
rm alpha1.xml
之前的4个标签。