嗨我有问题尝试使用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
答案 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