从bashshell中的文本行读取数字
我正在尝试编写一个bash shell脚本,它打开一个特定的文件CATALOG.dat,其中包含以下行,由字符和数字组成:从bashshell中的文本行读取数字,bash,shell,awk,sed,grep,Bash,Shell,Awk,Sed,Grep,我正在尝试编写一个bash shell脚本,它打开一个特定的文件CATALOG.dat,其中包含以下行,由字符和数字组成: event_0133_pk.gz event_0291_pk.gz event_0298_pk.gz event_0356_pk.gz event_0501_pk.gz 我要做的是只打印新文件numbers.dat中的数字,使用类似于>/numbers.dat的内容,以获得: 我的问题是:如何从文本行中提取数字?是否有什么方法可以使脚本只读取作为变量的数字,如C/C++中
event_0133_pk.gz
event_0291_pk.gz
event_0298_pk.gz
event_0356_pk.gz
event_0501_pk.gz
我要做的是只打印新文件numbers.dat中的数字,使用类似于>/numbers.dat的内容,以获得:
我的问题是:如何从文本行中提取数字?是否有什么方法可以使脚本只读取作为变量的数字,如C/C++中的event_0%d_pk.gz?有许多方法可以实现结果。一种方法是使用awk:
awk -F_ '{print $2}' CATALOG.dat > NUMBERS.dat
这将字段分隔符设置为下划线,然后打印包含数字的第二个字段。您可以使用grep命令提取数字部分
grep -oP '(?<=_)\d+(?=_)' CATALOG.dat
或
很简单
grep -oP '\d+' CATALOG.dat
grep解决方案:
grep -oP '[0-9]+' CATALOG.dat >NUMBERS.dat
sed 's/[^0-9]//g' CATALOG.dat >NUMBERS.dat
awk -F"[^0-9]+" '{print $2}' CATALOG.dat >NUMBERS.dat
sed解决方案:
grep -oP '[0-9]+' CATALOG.dat >NUMBERS.dat
sed 's/[^0-9]//g' CATALOG.dat >NUMBERS.dat
awk -F"[^0-9]+" '{print $2}' CATALOG.dat >NUMBERS.dat
以及awk解决方案:
grep -oP '[0-9]+' CATALOG.dat >NUMBERS.dat
sed 's/[^0-9]//g' CATALOG.dat >NUMBERS.dat
awk -F"[^0-9]+" '{print $2}' CATALOG.dat >NUMBERS.dat
在grep中不需要perl模式。布雷斯可以做到这一点
grep -o '[[:digit:]]\+' CATALOG.dat > NUMBERS.dat
Awk
猛击
tr
如果您使用的是Perl样式的正则表达式,那么最好使用\d而不是[0-9]。非常感谢,这正是我想要的!:如果我需要启动一个流程,每当每行中包含的数字在200到300之间时,我该怎么做?@urgeo我建议您单独问一个问题。tr-dc'[[:digit:][\n]'