使用SUSE计算机。
这是我文件中的一段
<object class="SaImmMngt">
<dn>safRdn=immManagement,safApp=safImmService</dn>
<attr>
<name>saImmRepositoryInit</name>
<value>2</value>
</attr>
</attr>
</object>
<object class="SaLogStreamConfig">
<dn>safLgStrCfg=saLogAlarm,safApp=safLogService</dn>
其中&#34; safRdn = immManagement,safApp = safImmService&#34;是独特的。我必须将值2更改为1,但这些行在文件中除了唯一行之外的每个位置都会重复。我不想按行号更改它。
我正在尝试这个:
`sed -n '/safRdn=immManagement,safApp=safImmService/,/safLgStrCfg=saLogAlarm,safApp=safLogService/p' /etc/opensaf/imm.xml | sed -i '0,/1/s//2/' /etc/opensaf/imm.xml`
但是这个命令会在任何地方更改值,所以如何捕获该特定字符串并更改文件。
注意:字符串 &#34; safRdn = immManagement,safApp = safImmService&#34;文件中是唯一的字符串,而文件中的其他行都是重复的。我不想创建任何额外的文件,更改应该只在文件中。
答案 0 :(得分:0)
这会将值从2更改为1,但前提是它在您的唯一字符串之后的三行内:
pointer operator-> const(){ return cur; }
要更改文件,请使用$ sed '/safRdn=immManagement,safApp=safImmService/,+3 s/<value>2/<value>1/' file
<object class="SaImmMngt">
<dn>safRdn=immManagement,safApp=safImmService</dn>
<attr>
<name>saImmRepositoryInit</name>
<value>1</value>
</attr>
</attr>
</object>
<object class="SaLogStreamConfig">
<dn>safLgStrCfg=saLogAlarm,safApp=safLogService</dn>
选项。
-i
sed -i '/safRdn=immManagement,safApp=safImmService/,+3 s/<value>2/<value>1/' file
这将设置一个以包含您的唯一字符串的行开头的范围,并继续执行后面的前三行。
如果一般情况下,三行不够,可以根据需要增加数量。
/safRdn=immManagement,safApp=safImmService/,+3
此命令仅适用于范围内的行。对于范围内的任何行,字符串s/<value>2/<value>1/
将更改为<value>2
。
答案 1 :(得分:0)
sed '/<object class="SaImmMngt">/,\#</object># {
\#<dn>safRdn=immManagement,safApp=safImmService</dn>#,\#</object># {
\#<name>saImmRepositoryInit</name>#,\#</attr># {
\#<value># s/2/1/
}
}
}' YourFile
#
),它不能成为模式的一部分(如默认/
,除非你逃避它)