내 결과는 다음과 같습니다.
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
성냥 인쇄