2015-01-23 5 views
0
Identifiable: fasdf/=egbalid=/more.garble/XY=foo.bar.baz 

나는 /Identifiable/으로 고유하게 식별 할 수있는 행이 있습니다. 내가 갖고 싶은 것은 XY (이 경우 foo.bar.baz)의 값입니다. 어떻게 그것을 awk에서 얻을 수 있습니까?awk : 특정 값 얻기

+2

' 라인의 d? 솔루션이 더 정확할 수 있도록 더 광범위한 샘플 입력을 보여줍니다. – fedorqui

+1

@ fedorqui ** 우리는 **'[^ =] * $'에 대해 생각하고 있습니다. – Kent

+0

@fedorqui 나는 그것이 시간의 95 %가 발생한다고 생각합니다. 어느 것이 충분합니다. – user857990

답변

1

이 목적으로 grep을 사용할 수 있습니다.

grep -oP '^(?=.*\bIdentifiable\b).*\bXY=\K[\w.]+' file 

예 :

$ echo 'Identifiable: fasdf/=egbalid=/more.garble/XY=foo.bar.baz' | grep -oP '^(?=.*\bIdentifiable\b).*\bXY=\K[\w.]+' 
foo.bar.baz 
0

이 행의 끝에서 항상 XY 값을 가정 할 (이것은 샘플 입력의 단지 1 라인이 게시 될 때 생각하는 것이 어렵다) :

$ awk -F= '/Identifiable/{print $NF}' file 
foo.bar.baz 
0

여기는 편도입니다 :

echo "Identifiable: fasdf/=egbalid=/more.garble/XY=foo.bar.baz" | awk -F"XY=" '{print $2}' 
foo.bar.baz 
+0

이것은 거의 작동 할 것이므로 적어도 awk -F ""를 사용해야합니다 (전체 문장은 조금 더 길어집니다). awk -F "XY = |"를 사용하면 더 이상 작동하지 않습니다. 나는 항상 빈 문자열을 얻는다. '$ 1'에도. 그것들은 두 FS와 함께'$ 3'이어야합니다. 그게 왜 일어날까요? – user857990

+0

'-F ""'와'-F "XY = |"'에 대해서 언급 했으므로 텍스트에 공백이나'| '가 있습니까? 데이터를 작성해 주시면 도와 드리겠습니다. – Jotne