我有XML文件,每次运行我的脚本时都必须更改此文件,我必须在那里找到一个特定的行
<data key='user.CC_MVFSModuleKernelPath,com.ibm.rational.clearcase.linux_x86' value='/lib/modules/2.6.32-279.el6.i686/build'/>
我无法确定此行是否在同一行号,是否有任何方法可以找到此行,并重新定位'/lib/modules/2.6.32-279.el6.i686/build'
的值。
我的输入文件是:
<data key='user.Common_AdminDir' value='/var/adm/rational'/>
<data key='user.Common_TempDir' value='/tmp'/>
<data key='user.CC_LICENSE_MANAGER,com.ibm.rational.clearcase.linux_x86' value='IBMRCL'/>
<data key='user.ATRIA_HOST_IS_REMOTE,com.ibm.rational.clearcase.linux_x86' value=''/>
<data key='user.ATRIA_REMOTE_HOSTNAME,com.ibm.rational.clearcase.linux_x86' value=''/>
<data key='user.ATRIA_LOCAL_KEY,com.ibm.rational.clearcase.linux_x86' value=''/>
<data key='user.CC_IS_ATRIA_LICENSE,com.ibm.rational.clearcase.linux_x86' value='false'/>
<data key='user.CC_MVFSModuleKernelPath,com.ibm.rational.clearcase.linux_x86' value='/lib/modules/2.6.32-279.el6.i686/build'/>
<data key='user.CC_MVFSModuleRebuild,com.ibm.rational.clearcase.linux_x86' value='1'/>
我需要替换包含下一个字符串的行中的值 - MVFSModuleKernelPath,com.ibm.rational.clearcase
我不知道此行中的当前内容是什么,因此搜索模式不能包含值中的字符串 - 我需要将其替换为新值,例如echo /lib/modules/
uname - r /build
此值将在某个变量valueToInsert
中
我希望能够在第一个地方打印一个值并输入一些变量,以便与我现有的内核版本进行比较然后替换它
答案 0 :(得分:1)
您可以使用sed
:
# printing current value
sed -n "\#<data key='user\.CC_MVFSModuleKernelPath,com\.ibm\.rational\.clearcase\.linux_x86'#s~^.*value='\([^']*\)'.*$~\1~p" file.xml
/lib/modules/2.6.32-279.el6.i686/build
# replacement of the value by $valueToInsert
sed -i.bak "\#<data key='user\.CC_MVFSModuleKernelPath,com\.ibm\.rational\.clearcase\.linux_x86'#s~^\(.*value='\)[^']*\('.*\)$~\1$valueToInsert\2~" file.xml
答案 1 :(得分:1)
打开文件并使用替换值替换“MY NEW VALUE”。
在命令行中我的“我的新值”是你的新值,也是在sed中使用#as delimiter而不是使用“/”将避免必须转义“/”字符。
xmllint my_xml_file|sed 's#key='user.CC_MVFSModuleKernelPath,com.ibm.rational.clearcase.linux_x86' value='/lib/modules/2.6.32-279.el6.i686/build'/>#key='user.CC_MVFSModuleKernelPath,com.ibm.rational.clearcase.linux_x86' value= MY NEW VALUE/>#g'
要查找行,突出显示并打印它,然后修改并打印新行,您可以尝试以下
xmllint xml_file| grep -o -E --color 'key='user.CC_MVFSModuleKernelPath,com.ibm.rational.clearcase.linux_x86' value='/lib/modules/2.6.32-279.el6.i686/build'/>' && xmllint my_xml_file|sed -n 's#key='user.CC_MVFSModuleKernelPath,com.ibm.rational.clearcase.linux_x86' value='/lib/modules/2.6.32-279.el6.i686/build'/>#key='user.CC_MVFSModuleKernelPath,com.ibm.rational.clearcase.linux_x86' value= MY NEW VALUE/>#p'