Regex bash:除了单引号中的内容外,我如何对所有内容进行子串?

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*;/\

例如,使用以下命令: 少一些文件名| 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*;/\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。尽管在这种情况下,自己寻找答案非常有用,但我应该开始问得快一点:)