【问题标题】:extracting-the-values-using-grep使用 grep 提取值
【发布时间】:2010-11-03 23:05:26
【问题描述】:

来自extracting the values using grep

Reading:RG1:+ /user/reading-2/Monday:12
Reading:RG1:- /user/**/Friday:12
Reading:RG1:- /user/**/*.txt:12
Reading:RG1:- /user/tet-23/**/*.txt:12
Reading:RG2:+ /user/reading-2/Monday:12
Reading:RG2:- /user/**/Friday:12
Reading:RG2:- /user/**/*.txt:12
Reading:RG2:- /user/tet-23/**/*.txt:12

我试过这个: 猫.txt | grep RG1|grep '-'|剪切 -d':' -f3-| cut -d'-' -f2 |sed -e 's/ //'

这不起作用,因为它会提取错误的路径,因为某些 + 也有 -

如何解决这个问题

【问题讨论】:

  • 无用的猫。您应该省略 cat a.txt 并将您的第一个 grep 更改为 grep RG1 a.txt。这不会解决您的问题,但它更有效。

标签: linux bash shell


【解决方案1】:

试试这个:

egrep "^[^:]*:RG1:-" a.txt | cut -d: -f3 | cut -b3-

示例运行:

$ cat a.txt 
Reading:RG1:+ /user/reading-2/Monday:12
Reading:RG1:- /user/**/Friday:12
Reading:RG1:- /user/**/*.txt:12
Reading:RG1:- /user/tet-23/**/*.txt:12
Reading:RG2:- /user/tet-23/**/*.txt:12
Reading:RG2:+ /user/reading-2/Monday:12
$ egrep "^[^:]*:RG1:-" a.txt | cut -d: -f3 | cut -b3-
/user/**/Friday
/user/**/*.txt
/user/tet-23/**/*.txt

"^[^:]*:RG1:-" 表示“从除: 之外的任何内容开始零次或多次,然后是:,然后是RG1,然后是-

【讨论】:

  • 我可能只需要搜索 RG1 然后它就不会工作..因为我在数据中有 RG2 , RG3 ...
【解决方案2】:

您可以尝试获取完整的“RG1:+”字符串,然后用空格进行剪切,例如:

grep "RG1:+" a.txt | cut -d" " -f2

【讨论】:

    【解决方案3】:

    用 sed 试试

    sed -r -e '/:RG1:/s/.*:[+-] //;s/:[0-9]+$//' a.txt
    

    这只会在其中包含:RG1: 的行上运行。您可以将其概括为所有行:

    sed -r -e 's/.*:[+-] //;s/:[0-9]+$//' a.txt
    

    或者只是带有 RG 和数字的行

    sed -r -e '/:RG[0-9]+:/s/.*:[+-] //;s/:[0-9]+$//' a.txt
    

    如果您想保留尾随 :12,只需省略最后的替换,例如:

    sed -r -e '/:RG[0-9]+:/s/.*:[+-] //' a.txt
    

    【讨论】:

      【解决方案4】:

      如果允许 Perl
      - 或 +

      perl -nE 'say $1 if /\AReading:RG[1-9]:[+-]\s+(.*)\Z/' file
      

      只有 -

      perl -nE 'say $1 if /\AReading:RG[1-9]:-\s+(.*)\Z/' file
      

      【讨论】:

        【解决方案5】:

        在我对您上一个问题的回答中尝试这种变体:

        grep -Po '(?<=RG1:- ).*(?=:\d*$)' a.txt 
        

        【讨论】:

          猜你喜欢
          • 2015-08-25
          • 2017-01-25
          • 1970-01-01
          • 2013-09-09
          • 2019-08-20
          • 2013-11-12
          • 1970-01-01
          • 2020-11-18
          • 2017-04-08
          相关资源
          最近更新 更多