將 sed 與特殊字元一起使用

將 sed 與特殊字元一起使用

我有一個充滿 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。

相關內容