提取匹配模式后的行中的值

提取匹配模式后的行中的值

我正在尝试提取匹配模式后第 N 行中的值'kappa (ts/tv) ='。我使用 awk 使用以下命令。

awk '/kappa (ts/tv) =/{print $NF}' text.txt

但我收到错误

awk: cmd. line:1: error: Unmatched ( or \(: /kappa (ts/

我也用“sed”得到这个错误。我知道我在这里遗漏了一些关于正则表达式的东西。

有人可以提出任何建议吗?

答案1

你那里有两个问题。首先,匹配运算符用作/分隔符。但是,您正在寻找的模式还包含一个/.这意味着:

/kappa (ts/tv) =/

被解释为/kappa (ts/and thentv) =/会产生语法错误。你需要逃离/并成功\/。接下来,括号在正则表达式上下文中具有特殊含义(在一些无论如何,正则表达式风格):它们用于捕获匹配的组。所以这些也需要转义才能做你想做的事。将所有这些放在一起得出:

awk '/kappa \(ts\/tv\) =/{print $NF}' text.txt

答案2

这里有两个错误:括号和斜杠应该被转义。总而言之,应该是:

awk '/kappa \(ts\/tv\) =/ {print $NF}' text.txt

答案3

你的问题不够明确,我的回答是根据你的说法:

“提取匹配模式后N 行的值......”

awk -v line_num_after_match=1 '
    NR==seen+line_num_after_match && seen { print; seen=0; };
    /kappa \(ts\/tv\) =/ && !seen { seen=NR; }' infile

在以下输入上运行:

line 1
line 2
line 3
line 4: kappa (ts/tv) =
line 5: another kappa (ts/tv) = but line 1 after match
line 6: but line 2 after first match and line 1 after second match
line 7: but line 3 after first match and line 2 after second match
line 8: yet another kappa (ts/tv) =
line 9: xxxxxxxx

返回:

line 5: another kappa (ts/tv) = but line 1 after match
line 6: but line 2 after first match and line 1 after second match
line 9: xxxxxxxx

答案4

sed命令

sed -n '/kappa (ts\/tv) =/p' filename

Python

#!/usr/bin/python
import re
l=re.compile(r'kappa \(ts\/tv\) =')
m=open('filename','r')
for h in m:
    if re.search(l,h):
        print h.strip()

相关内容