正则表达式,用于选择除特定字符之外的前 N 个字符



我在目录中有许多脚本,其格式为120100_0019_0_X0434147_script_name.sql

我只需要选择前 11 个数字(不包括下划线)

对于上面的脚本,我需要的结果是12010000190

我可以使用以下行获得结果,但我希望有人可以解释如何使用较短的代码或仅使用sed来实现此结果。

echo "$SCRIPT" | cut -c 1-13 | sed 's/_//g'

bash only方法:

$ script=120100_0019_0_X0434147_script_name.sql
$ script1=${script//_/} # Remove all _
$ script1=${script1:0:11} #Take first 11 characters
$ echo $script1
12010000190

$ script1=${script//_/} # Remove all _
$ script1=${script1/X*/} # Remove everything starting from X
$ echo $script1
12010000190

$ script1=${script//_/} # Remove all _
$ script1=${script1/[^0-9]*/} # Remove everything starting from first non-numeric character.
$ echo $script1
12010000190
你可以

这样做

echo '120100_0019_0_X0434147_script_name.sql' | sed -r 's/_//g; s/(^[0-9]{11}).*/1/'

首先删除"_",然后选择前 11 位数字,忽略该行的其余部分。

没有正则表达式,你可以写:

echo "${SCRIPT::13}" | tr -d _

相关内容

  • 没有找到相关文章

最新更新