Regex 从正则表达式获取子字符串
以下是一行文字: SRC='999' 其中999可以是任意三位数字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只打印线条,而不是线条的一部分
我需要一个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].*)”