使用 sed 在檔案中執行替換

使用 sed 在檔案中執行替換

我試圖使用 sed 替換一個大檔案中的日期。我試過 :

sed -ie 's/2014-[0-9]{2}-[0-9]{2}/2014-05-07/g' test

然而,什麼也沒發生,我的文件測試沒有被修改。你知道我在這裡缺少什麼嗎?

非常感謝。

答案1

預設情況下,sed使用基本正規表示式。在 BRE 中,{}()的行為就像普通字元一樣。因此,您需要轉義{and }

sed -i 's/2014-[0-9]\{2\}-[0-9]\{2\}/2014-05-07/g' test

如果使用擴展正規表示式,則不需要轉義它們,即

sed -r -i 's/2014-[0-9]{2}-[0-9]{2}/2014-05-07/g' test

選項-r表示sedERE:

   -r, --regexp-extended

          use extended regular expressions in the script.

此外,-e在您的範例中使用是多餘的。

答案2

試試轉義大括號:

sed -ie 's/2014-[0-9]\{2\}-[0-9]\{2\}/2014-05-07/g' test

答案3

任何一個

echo "foo 2014-01-01 bar" | sed -r 's/2014-[0-9]{2}-[0-9]{2}/2014-05-07/g'

或者

echo "foo 2014-01-01 bar" | sed 's/2014-[0-9]\{2\}-[0-9]\{2\}/2014-05-07/g'

相關內容