sed使用正则表达式搜索并提取特定字段

时间:2017-06-22 02:54:08

标签: regex bash sed

嗨我有问题尝试使用sed搜索一个非常大的文件以获取特定字符串并提取中间字段,这是我尝试过的:

例如,我正在寻找字符串$BBB.*,55

sed -n '/^$BBB.*,\b55\b/p', 

这将返回特定的行,但是我如何调整正则表达式以仅从中提取JOB1?感谢任何善意的建议

$AAA.JOB1,15

$AAA.JOB6,25

$BBB.JOB1,55 # I want to extract JOB1 from this line

$BBB.JOB2,59

CCC.CPU1,16

CCC.CPU4,18

3 个答案:

答案 0 :(得分:2)

首先,您需要使用\$,因为$metacharacter中的regex; 然后,您可以使用capture group来保留您想要的内容。 试试GNU sed

$ cat test.txt 
$AAA.JOB1,15
$AAA.JOB6,25
$BBB.JOB1,55
$BBB.JOB2,59
CCC.CPU1,16
CCC.CPU4,18
$ sed -nr 's/^\$BBB\.([^,]*),55/\1/p' test.txt
JOB1

答案 1 :(得分:2)

如果您想从搜索到的 $ BBB.JOB1,55 中提取 JOB1 。 您可以使用awk

$ awk -F[.,] '/\$BBB.*,55/{print $2}' test.txt
JOB1

如果要搜索的模式已分配给变量,请使用以下方法

$ var1=$BBB
$ var2=55
$ awk -F[.,] -v v=$var1".*,"$var2 '$0 ~ v{print $2}' test.txt
JOB1

答案 2 :(得分:0)

grep

grep -Po "(?<=\.)([^\.]*[^,])(?=,)" filename

输出:

JOB1
JOB6
JOB1
JOB2
CPU1
CPU4