Linux sed替换第n次出现并保存到同一文件中
我试图使用sed将单词hashTree的第二个实例替换为单词replacedText,并更新文件Test1.jmx。由于某种原因,替换和文件更新不起作用。-有什么想法吗Linux sed替换第n次出现并保存到同一文件中,linux,bash,unix,Linux,Bash,Unix,我试图使用sed将单词hashTree的第二个实例替换为单词replacedText,并更新文件Test1.jmx。由于某种原因,替换和文件更新不起作用。-有什么想法吗 sed -i '' 's/hashTree/ReplacedTxt/2' Test1.jmx Test1.jmx是我试图更新的文件 <?xml version="1.0" encoding="UTF-8"?> <jmeterTestPlan version="1.2" properties="2.8" jme
sed -i '' 's/hashTree/ReplacedTxt/2' Test1.jmx
Test1.jmx是我试图更新的文件
<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="2.8" jmeter="2.13 r1665067">
<hashTree>
<hashTree>
</hashTree>
</jmeterTestPlan>
假设您的文件实际上是有效的XML(即第4行是
,而不仅仅是
),您可以使用xmlstarlet
:
xml ed -r '/jmeterTestPlan/hashTree/hashTree' -v ReplacedTxt Test1.jmx
引用AWK的帖子给了我最好的解决方案:
scriptLocation="Test1.jmx"
txtToAdd="$XML_DIR/perfXml.txt"
myVar=`cat txtToAdd`
awkOut=$(awk -v s='<hashTree>' -v myVar="$myVar" '$0~s{c++} c==2{sub(s, myVar); c=0} 1' "${scriptLocation}")
echo "$awkOut" > $scriptLocation
scriptLocation=“Test1.jmx”
txtToAdd=“$XML\u DIR/perfXml.txt”
myVar=`cat TXTOADD`
awkOut=$(awk-vs=''-v myVar=“$myVar”'$0~s{c++}c==2{sub(s,myVar);c=0}1'${scriptLocation})
回显“$awkOut”>$scriptLocation
我猜,/2
告诉sed替换每行的第二个匹配项。没有一行有两个匹配项。seesed
是面向行的,因此它不会跟踪在前几行中看到该单词的时间。您可能想考虑自从SGML出现以来构建的工具。谢谢,我一直在和AWK合作。然而,我想要一个sed解决方案。我去看看awk。感谢您的帮助awkout=$(awk-v s=''-v myVar=“$myVar”'$0~s{c++}c==2{sub(s,myVar);c=0}1'${scriptLocation}”)@Sascha使用awkawk
,sed
,grep
,等等,可能至少有36种方法。我想说的是你。