Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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
Regex 从正则表达式获取子字符串_Regex_Grep - Fatal编程技术网

Regex 从正则表达式获取子字符串

Regex 从正则表达式获取子字符串,regex,grep,Regex,Grep,以下是一行文字: SRC='999' 其中999可以是任意三位数字 我需要一个grep命令来返回999。如何执行此操作?平台grep或通用正则表达式 正则表达式 SRC\=\'(\d{3})\' 为什么是格雷普?那 substr("SRC='999'",6,3) 要匹配的行是否始终采用SRC='nnn'格式?那你可以用 grep SRC | cut -d"'" -f2 你不能用普通的格雷普。正如我的方框上的手册页所述:“grep-打印与模式匹配的线条”grep只打印线条,而不是线条的一部分

以下是一行文字:

SRC='999'

其中999可以是任意三位数字


我需要一个grep命令来返回999。如何执行此操作?

平台grep或通用正则表达式

正则表达式

SRC\=\'(\d{3})\'
为什么是格雷普?那

substr("SRC='999'",6,3)

要匹配的行是否始终采用
SRC='nnn'
格式?那你可以用

grep SRC | cut -d"'" -f2

你不能用普通的格雷普。正如我的方框上的手册页所述:“grep-打印与模式匹配的线条”grep只打印线条,而不是线条的一部分

我建议使用awk,因为它可以进行模式匹配和子行提取:

awk -F\' ' /SRC/ {print $2}'

下面是如何使用sed实现它

grep SRC=\'.*\' | sed 's/SRC=.\(.*\)./\1/'

取决于您的平台/语言

在Ruby中:

string = "SRC = '999'"

string.match(/([0-9]{3})/).to_s.to_i 
将返回一个整数,sed就可以了

$ echo SRC='999' | sed '/SRC/s/SRC=//'
999

您可以使用
grep
上的
-o
选项仅返回与正则表达式匹配的字符串部分:

echo "SRC='999'" | grep -o -E '[0-9]{3}'

这将比运行正则表达式更快,但折衷是它不会处理数据格式的任何更改(例如,两位数而不是三位数)。我正在尝试以下方法:egrep“SRC=\'([0-9]+)\'”/tmp/test/file,返回:SRC='112',但我只想要这个:112我正在使用QShell,在iSeries上运行。我发现的正则表达式部分,正是我需要的行的提取部分阻碍了我。这很酷。获取已安装软件ansible的版本很好--版本| grep-o-E“([0-9].*)”