Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从bashshell中的文本行读取数字_Bash_Shell_Awk_Sed_Grep - Fatal编程技术网

从bashshell中的文本行读取数字

从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++中

我正在尝试编写一个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_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]'NUMBERS.dat可能重复?