shell字符串替换问题

[复制链接]
查看11 | 回复9 | 2021-1-27 06:57:09 | 显示全部楼层 |阅读模式
我想实现这样一个功能,shell中对如下的列表进行遍历(列表中是如下的一串数字):
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
我想删除其前导的0,这么写的:
forxin$(seq-w100);do
echo${x##0*}
done
这里${x##[patter]}这种方法为什么将*当做了通配符使用?而不是将0重复若干遍?我把pattern写成00*同样错误
我该如何表示将0重复至少一遍这个模式呢?
分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:57:09 | 显示全部楼层
echo${x##0*0}
回复

使用道具 举报

千问 | 2021-1-27 06:57:09 | 显示全部楼层
引用1楼cainiao000的回复:echo${x##0*0}
这样的话像010这样的就会被删掉....
回复

使用道具 举报

千问 | 2021-1-27 06:57:09 | 显示全部楼层
seq1100
回复

使用道具 举报

千问 | 2021-1-27 06:57:09 | 显示全部楼层
seq-w100|sed's/^0\+//'
回复

使用道具 举报

千问 | 2021-1-27 06:57:09 | 显示全部楼层
forxin$(seq1100);do
echo$x
done

回复

使用道具 举报

千问 | 2021-1-27 06:57:09 | 显示全部楼层
先把答案给你。
如果是在脚本里写的话,先把extendedpattermatching打开
shopt-sextglob
foriin$(cattemp)#这里假设temp是楼主放数据的文件
do
i=${i##*(0)}
echo$i
done
就可以将前面的0全删掉了。至于为什么,建议楼主manbash以下。
然后在1062-1092行中间,这么说的
${parameter##word}
Removematchingprefixpattern.Thewordisexpandedtoproduceapatternjustasinpathnameexpansion.
在parameterexpansion(参数展开)中,知道${parameter##word}中的word是按照pathnameexpansion进行的,不是正则表达式(grep)类型的,所以不能在后面加*来实现匹配0到无穷次。
pathnameexpansion在bash的手册里也有,1229-1259行中提到
Iftheextglobshelloptionisenabledusingtheshoptbuiltin,severalextendedpatternmatchingoperatorsarerec‐
ognized.Inthefollowingdescription,apattern-listisalistofoneormorepatternsseparatedbya|.Compos‐
itepatternsmaybeformedusingoneormoreofthefollowingsub-patterns:
?(pattern-list)
Matcheszerooroneoccurrenceofthegivenpatterns
*(pattern-list)
Matcheszeroormoreoccurrencesofthegivenpatterns
+(pattern-list)
Matchesoneormoreoccurrencesofthegivenpatterns
@(pattern-list)
Matchesoneofthegivenpatterns
!(pattern-list)
Matchesanythingexceptoneofthegivenpatterns
所以这里,我用*(0)就可以匹配任意次0了

回复

使用道具 举报

千问 | 2021-1-27 06:57:09 | 显示全部楼层
这个就可以了sed's/^0//'
回复

使用道具 举报

千问 | 2021-1-27 06:57:09 | 显示全部楼层
引用7楼cherry532的回复:这个就可以了sed's/^0//'
你没做测试吧
[root]#echo001|sed's/^0//'
01
回复

使用道具 举报

千问 | 2021-1-27 06:57:09 | 显示全部楼层
sed's/^0*//'
test:
$echo001|sed's/^0*//'
1
$echo010|sed's/^0*//'
10
$echo111|sed's/^0*//'
111
$echo100|sed's/^0*//'
100
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行