作业帮 > 综合 > 作业

sed获取字符有一串字符"29djk39ef3kd93lsl39lds9r3dlf39fl"echo "29djk39e

来源:学生作业帮 编辑:搜狗做题网作业帮 分类:综合作业 时间:2024/06/15 23:37:07
sed获取字符
有一串字符"29djk39ef3kd93lsl39lds9r3dlf39fl"
echo "29djk39ef3kd93lsl39lds9r3dlf39fl" | sed -n 's/[^0-9]*\?\([0-9]\+\?\)/\1/pg'
可以匹配所有的数字,但为什么下面这句不行:
sed -n 's/\([0-9]\)/\1/pg'
sed获取字符有一串字符
这里的匹配模式只能匹配只有一个数字的行,当然就不行了.
再问: 以下是运行结果: --------------------------------------------------- root@git:~/cmake# echo "sdkdldld3ldldl" | sed -n 's/[^0-9]*\([0-9]*\)/\1/pg' 3 root@gitlab:~/cmake# echo "sdkdldld3ldldl" | sed -n 's/\([0-9]\)/\1/pg' sdkdldld3ldldl ---------------------------------------------------- 为什么第二条语句会显示全部呢?sed后面有加g的参数的。
再答: 你的匹配模式是\([0-9]\),表示匹配0-9中的一个数字,然后替换成标签1,标签1就是\([0-9]\)即原来的那个数字,所以替换没有任何作用 g表示全局替换,意思是在整行里面搜索所有的匹配模式,不加g的话,只会替换匹配的第一个模式值,关于g参数可以举个例子: --------------------------------------------------- root@gitlab:~/cmake# echo "0sd2kdldld3ldldl" | sed -n 's/\([0-9]\)/1/p' 1sd2kdldld3ldldl root@gitlab:~/cmake# echo "0sd2kdldld3ldldl" | sed -n 's/\([0-9]\)/1/pg' 1sd1kdldld1ldldl ---------------------------------------------------- echo "sdkdldld3ldldl" | sed -n 's/[^0-9]*\([0-9]*\)/\1/pg' 你这条sed命令意思是用[^0-9]*\([0-9]*\)来匹配整行内容,然后将整行内容替换成\1标签的内容即数字,所以得到的结果就是3