Regex bash:除了单引号中的内容外,我如何对所有内容进行子串?
例如,使用以下命令: 少一些文件名| grep-w“一些文本” 提供以下输出:Regex bash:除了单引号中的内容外,我如何对所有内容进行子串?,regex,bash,substring,Regex,Bash,Substring,例如,使用以下命令: 少一些文件名| grep-w“一些文本” 提供以下输出: some_text = 'x.y.z'; 作为x,y,z数字,比如1.12.5,我如何将输出剥离到 x.y.z 应该可以使用一些正则表达式或sed/awk之类的工具,但无法理解。我发现当使用grep时,cut是我的朋友。您可以剪切字符或字段。在这种情况下,您可能需要以下内容: echo " some_text = '12.3.012';" | sed -r "s/[^']+'([.0-9]+)'\s*;/\
some_text = 'x.y.z';
作为x,y,z数字,比如1.12.5,我如何将输出剥离到
x.y.z
应该可以使用一些正则表达式或sed/awk之类的工具,但无法理解。我发现当使用
grep
时,cut
是我的朋友。您可以剪切字符或字段。在这种情况下,您可能需要以下内容:
echo " some_text = '12.3.012';" | sed -r "s/[^']+'([.0-9]+)'\s*;/\1/"
echo“some_text='x.y.z'”cut-d\'-f2
-d
参数指定分隔符(此处转义),而-f
指定字段号(1-索引)
如果您的数据可能位于不同的字段中,那么您必须找到一个与所需部分匹配的regexp。像
cat文件| grep-o x\.y\.z
-o
到grep
意味着只返回匹配的部分。由awk:
kent$ echo "some_text = 'x.y.z';"|awk -F"'" '{print $2}'
x.y.z
实际上,你也可以在grep线上做点什么。e、 g
less somefile | grep -Po "(?<=some_text = ')[^']*(?=')"
less somefile | grep-Po”(?这将执行行匹配和内容提取:
awk -F"'" '/some_text/{print $2}' some_filename
例如:
[me@home]$ cat some_filename
random data
some_text = 'x.y.z';
another_text = '1.2.3.4';
[me@home]$ awk -F"'" '/some_text/{print $2}' some_filename
x.y.z
awk
命令的简要说明:
-F“
:将字段分隔符更改为”
。这将有效地将字符串“some_text='x.y.z'
”拆分为3个字段—“some_text=
”、“x.y.x
”和“;
”
/some_text/
:仅匹配包含“some_text
”的行
{print$2}
:对于每个匹配行,打印第二个字段(在本例中为“x.y.z
”)
与相同,仅加上搜索某些文本
sed -n "/some_text/ s@.*'\([^']*\)'.*@\1@p"
谢谢。第一部分帮了我的忙。不过,由于某种原因,grep选项不起作用。在我尝试过的所有东西中,缺少了“cut”选项。这一个也适用于我,就像我正在寻找的一样,可以理解。谢谢。@slibbe请检查这个答案,作为“This helps me”,再次感谢:)这一个也适用于我。因此,现在我有三个选项,两个是我一直在寻找的选项,还有一个易于理解的第三个新选项。Thx。尽管在这种情况下,自己寻找答案非常有用,但我应该开始问得快一点:)