서로 다른 2개의 일치 항목 사이에서 텍스트 추출

서로 다른 2개의 일치 항목 사이에서 텍스트 추출

특정 첫 번째 항목(_ 및 -) 사이의 텍스트를 추출하려고 합니다. 예를 들어 아래에서 숫자 5를 가져와야 합니다.

MQSeriesRuntime_5-U200491-7.5.0-4.x86_64

awk 필드 구분 기호(awk -F)를 시도했지만 _ 뒤에 전체 텍스트가 표시되었습니다.

답변1

필드 구분 기호를 사용하여 창의력을 발휘하면 됩니다.

$ awk 'BEGIN {FS="_|-"} {print $2}' input
5

비결은 FS문자열이 아니라는 것입니다. 이것은 정규식입니다.

귀하의 요청에 따라 아래에 더 자세히 설명되어 있습니다.

스크립트는 들어오는 데이터가 처리되기 전에 실행되는 awk코드 블록을 정의할 수 있습니다 .BEGIN

FS나는 이 코드 블록을 사용하여 정규식을 하이픈() 또는 밑줄()로 사용하여 -필드 구분 기호()를 정의합니다 _.

다음 코드 블록은 찾고 있는 필드 인 {print $2}두 번째 필드(즉, 이전 구분 기호로 구분된 두 번째 문자열)를 인쇄합니다 . 접두사가 없는 코드 블록은 읽은 각 레코드에 대해 실행됩니다 ./-|_/5awk

답변2

매개변수를 사용하면 -F약간 더 짧은 솔루션을 얻을 수 있습니다.

$ awk -F'-|_' '{print $2}' input
5

답변3

sed대체 방법:

sed 's/^[^_-]*_\([^_-]*\)-.*/\1/' file
5

답변4

에서 영감을 받다https://stackoverflow.com/a/2957781/53897:

echo MQSeriesRuntime_5-U200491-7.5.0-4.x86_64 | perl -n -e '/_([^-]+)/ && print $1'

관련 정보