我正在尝试提取匹配模式后第 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()
~