Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux sed替换第n次出现并保存到同一文件中_Linux_Bash_Unix - Fatal编程技术网

Linux sed替换第n次出现并保存到同一文件中

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将单词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" 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替换每行的第二个匹配项。没有一行有两个匹配项。see
sed
是面向行的,因此它不会跟踪在前几行中看到该单词的时间。您可能想考虑自从SGML出现以来构建的工具。谢谢,我一直在和AWK合作。然而,我想要一个sed解决方案。我去看看awk。感谢您的帮助awkout=$(awk-v s=''-v myVar=“$myVar”'$0~s{c++}c==2{sub(s,myVar);c=0}1'${scriptLocation}”)@Sascha使用awk
awk
sed
grep
,等等,可能至少有36种方法。我想说的是你。