我在目录中有许多脚本,格式为120100_0019_0_X0434147_script_name.sql
我只需要选择前11个数字(不包括下划线)
对于上面的脚本,我需要的结果是12010000190
我可以通过使用以下行获得结果,但我希望有人可以解释如何使用更短的代码或仅使用sed
来实现此结果。
echo "$SCRIPT" | cut -c 1-13 | sed 's/_//g'
答案 0 :(得分:1)
bash only approach:
$ script=120100_0019_0_X0434147_script_name.sql
$ script1=${script//_/} # Remove all _
$ script1=${script1:0:11} #Take first 11 characters
$ echo $script1
12010000190
OR
$ script1=${script//_/} # Remove all _
$ script1=${script1/X*/} # Remove everything starting from X
$ echo $script1
12010000190
OR
$ script1=${script//_/} # Remove all _
$ script1=${script1/[^0-9]*/} # Remove everything starting from first non-numeric character.
$ echo $script1
12010000190
答案 1 :(得分:0)
你可以这样做
echo '120100_0019_0_X0434147_script_name.sql' | sed -r 's/_//g; s/(^[0-9]{11}).*/\1/'
首先删除' _'然后选择前11位数字,忽略该行的其余部分。
答案 2 :(得分:0)
如果没有正则表达式,您可以写:
echo "${SCRIPT::13}" | tr -d _