我有一个包含这些行的xml文件(其中包括):
#Env=DEV2,DEV3,DEV5,DEV6
#Enter your required DEV environment after the ENV= in the next line:
Env=DEV6
我需要:
ENV=
之后的文字属于DEV{1..99}
ENV=DEV6
中提取数字(在本例中为6)到某个环境变量我知道一些awk和grep,并且可以使用它来获取数字,但我想到了Sed,我告诉匹配模式比awk更好并且花费更少的时间。另外,我担心长长的greps行匹配特定Env =的行的开头。
我如何用Sed做这件事?我会用更短的线路逃脱吗?
我是一个新手,阅读了一堆教程和示例,让我的手指扭曲,试图同时做两件事......
答案 0 :(得分:2)
如果grep
正则表达式可用,也可以使用pcre
$ cat ip.txt
#Env=DEV2,DEV3,DEV5,DEV6
#Enter your required DEV environment after the ENV= in the next line:
Env=DEV6
foo
Env=DEV65
bar
Env=DEV568
$ grep -xoP 'Env=DEV\K[1-9][0-9]?' ip.txt
6
65
-x
匹配整行-o
仅输出匹配的文字-P
使用pcre
regex Env=DEV\K
匹配Env=DEV
但不属于输出[1-9][0-9]?
范围1
至99
答案 1 :(得分:1)
我建议使用GNU sed:
var=$(sed -nE 's/^Env=DEV([0-9]{1,2})$/\1/p' file)
echo "$var"
输出:
6
答案 2 :(得分:1)
您可以将sed
用作
$ sed 's/^Env=DEV\([1-9][0-9]\?\)/\1/' file
6
您可以在export
命令中直接使用上述命令
export YOUR_EXPORT_VARIABLE=$(sed 's/^Env=DEV\([1-9][0-9]\?\)/\1/' file)
(或)与perl
$ perl -nle 'print $1 if /Env=DEV.*?(\d+)/' file
6
答案 3 :(得分:1)
awk -F'Env=DEV' '/Env=DEV[0-9]$|Env=DEV[0-9][0-9]$/{print $2}' input
输入:
echo '
Env=DEV6
Env=DEVasd
Env=DEV62
Env=DEV622'
输出:
awk -F'Env=DEV' '/Env=DEV[0-9]$|Env=DEV[0-9][0-9]$/{print $2}' input
6
62
将其存储到任何变量中:
var=$(awk command)
答案 4 :(得分:1)
在awk中。首先是一些测试用例:
$ cat file
foo
Env=DEV0
Env=DEV1
Env=DEV99
Env=DEV100
$ awk 'sub(/^Env=DEV/,"") && /^[1-9][0-9]?$/' file
1
99