패턴 매칭 후 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/
다음 으로 해석되면 tv) =/
구문 오류가 발생합니다. 탈출 /
해서 성공 해야 합니다 \/
. 다음으로, 괄호는 정규식의 맥락에서 특별한 의미를 갖습니다(일부어쨌든, 정규식 스타일): 일치하는 그룹을 캡처하는 데 사용됩니다. 따라서 원하는 작업을 수행하려면 이스케이프도 필요합니다. 이 모든 것을 종합하면 다음과 같습니다.
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
파이썬
#!/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()
~