我試圖使用 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
表示sed
ERE:
-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'