Sed + 正则表达式不匹配并用 \d 替换出现的情况

Sed + 正则表达式不匹配并用 \d 替换出现的情况

我正在尝试使用以下命令删除行开头的数字:

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.

为什么这不起作用?尝试了很久

答案1

Sed 不理解 \d 代表数字。为此,请使用 [0-9] 或更正确地使用 [[:digit:]]

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

编辑:

  • sed 并不普遍理解 \t。 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

相关内容