세미콜론 사이에 공백으로 구분된 데이터 사용

세미콜론 사이에 공백으로 구분된 데이터 사용

내 결과는 다음과 같습니다.

scott name1;tiger name2;elephant name3;mouse name4;bla1 name5;bla2 name6

"scott"을 검색하고 "name1"이라는 문자열만 가져오고 싶습니다. sed를 사용하여 어떻게 이를 달성할 수 있나요?

답변1

더 자세한 솔루션:

echo "scott name1;tiger name2;elephant name3;mouse name4;bla1 name5;bla2 name6" \
  | tr ';' '\n' | grep "scott" | cut -d ' ' -f 2

답변2

awk를 사용하세요:

echo "scott name1;tiger name2;elephant name3;mouse name4;bla1 name5;bla2 name6" \
  | awk -v RS=\; '$1=="scott"{print $2}'

레코드 구분 기호는 문자열을 레코드의 첫 번째 필드 로 캡처 RS하도록 설정됩니다 . 일단 발견되면 두 번째 필드가 인쇄됩니다.;scott$1$2

답변3

이 시도,

echo "scott name1;tiger name2;elephant name3;mouse name4;bla1 name5;bla2 name6" \
  | sed -n -e 's/^scott \(\w\+\);.*/\1/p'

"scott"과 ";" 사이의 문자열을 역참조하면 됩니다.

답변4

그리고 sed:

$ echo "scott name1;tiger name2;elephant name3;mouse name4;bla1 name5;bla2 name6" \
  | sed -n 's/\(^\|.*;\)scott \([^;]*\).*/\2/p'
name1

또는 "호랑이"를 사용하십시오:

$ echo "scott name1;tiger name2;elephant name3;mouse name4;bla1 name5;bla2 name6" \
  | sed -n 's/\(^\|.*;\)tiger \([^;]*\).*/\2/p'
name2
  • sed -n패턴 공간의 자동 인쇄 비활성화
  • s/바꾸다
  • \(^\|.*;\)) 를 사용하여 첫 번째 캡처링 그룹으로 줄의 시작 부분 ^이나 세미콜론 뒤의 모든 문자와 일치합니다..*;\(...\
  • scott"scott" 뒤에 공백 문자가 오는 것과 일치합니다.
  • \([^;]*\)두 번째 캡처 그룹은 세미콜론이 아닌 문자(원하는 부분)와 일치합니다.
  • .*다음 문자 중 하나와 일치
  • /\2/두 번째 캡처 그룹으로 대체됨
  • p성냥 인쇄

관련 정보