我有一個充滿 XML 檔案的目錄,如下所示,我想將其「偏移」元素編號的值從 1 更改為其他數字
$ cat my.xml
<offset xmlns="">1</offset>
我編寫了此 sed 命令的各種組合,但我嘗試的所有命令都無法正常運行。我很確定我需要轉義一些字符,但是我嘗試過的那些字符總是以錯誤結束(“意外的標記”,“未知的選項”等)。我也嘗試過不使用 -e 標誌,因為它確實不是一個表達式。
sed -i -e s/<offset xmlns="">1</offset>/<offset xmlns="">99</offset>/ *.xml
任何幫助,將不勝感激。
答案1
你不需要/
在 sed 中使用,你可以使用逗號,例如:
sed -i 's,<offset xmlns="">1</offset>,NEW_TEXT,' FILE
答案2
試試這個,
$ sed 's~<offset xmlns="">1~<offset xmlns="">99~g' file
<offset xmlns="">99</offset>
如果輸入包含斜杠,請使用不同的 sed 分隔符號。
答案3
您通常不需要s/earch/replace/
函數本身中的所有這些,而是可以先/address/
有條件地執行/s///
。它不僅可以幫助提高可讀性並避免您提到的一些問題,還可以提高效能:
sed '/offset xmlns=/s/>1</>99</'
答案4
我將替換該行的第 17 個字符,其中包含值:
sed -i 's/^\(.\{17\}\)./\1VALUE/' file.xml
將 VALUE 替換為 的新值<offset>
。例如。
sed -i 's/^\(.\{17\}\)./\18/' file.xml
將其更改為 8。