来自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
我试过这个: cat a.txt | grep RG1 | grep' - '| cut -d':' - f3- | cut -d'-'-f2 | sed -e's / //'
这不会起作用,因为它会提取错误的路径,因为某些+也有 -
如何重新解决此问题
答案 0 :(得分:2)
试试这个:
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
,后跟-
。
答案 1 :(得分:1)
您可以尝试获取完整的“RG1:+
”字符串,然后按空格剪切,例如:
grep "RG1:+" a.txt | cut -d" " -f2
答案 2 :(得分:1)
尝试使用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
答案 3 :(得分:0)
如果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
答案 4 :(得分:0)
根据我之前提出的问题的答案尝试这种变化:
grep -Po '(?<=RG1:- ).*(?=:\d*$)' a.txt