grep / cut 명령을 통해 특정 단어 / 번호 인쇄


7

test.txt다음 결과를 포함 하는 파일 이 있습니다.

service_name1= apple/ball/cat/dog/egg/12.34.56/ball/apple
service_name2= fan/girl/house/ice/joker/23.45.67/fan/girl

service_name1500

나는 다음과 같은 출력을 원한다 :

egg 12.34.56
joker 23.45.67

등등 : 그 이전의 단어와 함께 버전 번호.


grep으로해야합니까? 나는 sed또는awk
SeDav

답변:


10

이것은 간단한 cut직업 이어야합니다 :

cut -d/ -f5,6 --output-delimiter=" "
  • -d/ 입력 구분자를 다음과 같이 설정합니다. /
  • -f5,6 5 번째와 6 번째 필드 만 출력
  • --output-delimiter=" " 출력 분리 문자를 공백으로 설정

와 같은 것은 awk, awk기본적으로는 공간으로 출력 필드 분리를 설정합니다 :

awk -F/ '{print $5,$6}'

예:

% cat file.txt
service_name1= apple/ball/cat/dog/egg/12.34.56/ball/apple
service_name2= fan/girl/house/ice/joker/23.45.67/fan/girl

% cut -d/ -f5,6 --output-delimiter=" " file.txt
egg 12.34.56
joker 23.45.67

% awk -F/ '{print $5,$6}' file.txt
egg 12.34.56 
joker 23.45.67

8

sed솔루션 (버전 문자열의 필드 위치가 일치 여부 작동하지만, 버전 문자열의 형태가 일치해야합니다)

$ sed -r 's#.*/(.*)/([0-9]{2}\.[0-9]{2}\.[0-9]{2}).*#\1 \2#' test.txt
egg 12.34.56

joker 23.45.67

설명

  • -rERE를 사용하면 ()메타 문자 를 피할 필요가 없습니다
  • s#old#new#패턴을 찾아 old교체new
  • .* 이 위치에 문자가 있거나 일치하지 않습니다
  • (stuff)stuff나중에 기억해
  • [0-9]{2}\.[0-9]{2}\.[0-9]{2} [2 자리]. [2 자리]. [2 자리]의 패턴
  • \1 \2 사이에 공백이있는 두 가지 기억 패턴

5

이것은 그것을 할 것입니다 :

cut -d'/' -f5-6 test.txt | tr -s "/" " "

3

고정 단어 위치를 처리하면 다음과 같이 작동합니다.

grep -e 'service_name[0-9]*=' test.txt|awk -F'/' '{ print $5" "$6 }'

2
$sed -r 's/.*\/([[:alpha:]]+)\/([\.0-9]*)\/.*/\1 \2/' test.txt

설명:

  • .* 시작과 끝에서 다음과 일치하지 않는 모든 문자를 자릅니다.
  • ([[:alpha:]]+) 괄호 안의 첫 번째 하위 그룹은 알파벳 문자 만 일치합니다.
  • \/ 슬래시와 일치합니다.
  • 다음 하위 그룹 ([\.0-9]*)은 숫자와 포인트를 일치시켜 두 번째 레지스터에 저장합니다
  • 단일 슬래시 후 /대체로 \1 \2일치하는 하위 그룹에서 첫 번째 및 두 번째 레지스터를 삽입합니다.

1

길지만 작동하는 파이썬 원 라이너 :

$ python -c "import sys;print '\n'.join([ ' '.join(l.strip().split('/')[4:6]) for l in sys.stdin])" < input.txt          
egg 12.34.56
joker 23.45.67

작동 방식 :

  • 입력 파일 <을 파이썬의 stdin 스트림으로 리디렉션
  • 목록 이해 [item for item in sequence]를 사용 하여 stdin을 한 줄씩 읽습니다.
  • .split()/구분자로 사용하여 줄을 단어 목록으로 나눌 수 있습니다.
  • 단어 4와 5를 추출하고 ([4 : 6]은 마지막 숫자가 포함되지 않음을 의미) 다음을 사용하여 문자열을 만듭니다. ' '.join()
  • 원하는 문자열 목록을 만들고를 사용하여 줄로 바꾸고 '\n'.join()모두 인쇄하십시오.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.