我在目录中有许多脚本,其格式为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 _