Text-Processing

Sed + 正則表達式不匹配和替換發生

  • December 23, 2021

我正在嘗試使用以下命令刪除行首的數字:

sed -i 's/^\d*\t//' sea_news_2020_corpus.txt

該行如下所示:

809940  The sea will be moderate in the Arabian Gulf and slight to moderate in Oman.

為什麼這不起作用?試了很久

Sed 不理解 \d 的數字。對於那個用途

$$ 0-9 $$或更準確地說$$ [:digit: $$]

sed -i 's/^[0-9]*\t//' yourfile

編輯:

  • \t 沒有被 sed 普遍理解。POSIX 沒有強制要求。因此,為此使用 shell 變數,或者使用受 ksh $’\t’ 啟發的構造滑入轉義的 TAB
  • Mac 上的就地編輯 -i 需要在它後面加上一個參數,儘管 GNU 在這裡是寬容的。請注意, -i 不是 Posix 強制要求的。
sed -i"" -e $'s/^[[:digit:]]*\t//' input_file

TAB=$(echo x | tr x '\011')
# or $(printf '\t')
sed -i"" -e "s/^[[:digit:]]*$TAB//" input _file

引用自:https://unix.stackexchange.com/questions/681169