Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.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 使用';sed';在一行中找到一个数字_Regex_Shell_Sed - Fatal编程技术网

Regex 使用';sed';在一行中找到一个数字

Regex 使用';sed';在一行中找到一个数字,regex,shell,sed,Regex,Shell,Sed,我试图使用unixsed命令查找与特定正则表达式匹配的行号。我的文件模式如下 Murali : 20 # Krishna: 21 $ Hari: 22 @ Murali : 23 # 我只需要使用SED命令输出下面这样的数字 20 21 22 23 你能帮我学习一下SED的正则表达式吗 $ cat input Murali : 20 # Krishna: 21 $ Hari: 22 @ Murali : 23 # $ sed -r 's/^[^0-9]+([0-9]+).*/\1/g' i

我试图使用unixsed命令查找与特定正则表达式匹配的行号。我的文件模式如下

Murali : 20 #
Krishna: 21 $
Hari: 22 @
Murali : 23 #
我只需要使用
SED
命令输出下面这样的数字

20
21
22
23
你能帮我学习一下SED的正则表达式吗

$ cat input
Murali : 20 #
Krishna: 21 $
Hari: 22 @
Murali : 23 #

$ sed -r 's/^[^0-9]+([0-9]+).*/\1/g' input
20
21
22
23
  • [^0-9]+
    匹配除数字以外的任何内容

  • ([0-9]+)
    匹配组1中捕获的数字

  • *
    与其余部分匹配


    • 您也可以参考
      awk
      版本

      awk -F":" '{print $2--}'
      
      输出:

      20
      21
      22
      23
      

      这是一个
      awk
      。它可能比正则表达式
      sed
      解决方案更容易理解

      awk '{print $(NF-1)}' file
      20
      21
      22
      23
      

      打印倒数第二个字段。

      为什么不使用剪切?像
      cut-d'-f2
      甚至一些更短的
      awk-F:'{$0=+$2}1'
      awk-F:'{print+$2}'