aaaaaa"bbbbb"aaaa
출력하고 싶은 텍스트가 있습니다.bbbbb
나는 이것을 시도했지만 문자 sed -e 's/"\(.*\)"/\1/'
만 잘립니다 . "
이것을 올바르게 필터링하려면 어떻게 해야 합니까?
답변1
쉽게 작업하세요 cut
.
텍스트가 표준 입력에서 오는 경우:
echo 'aaaaaa"bbbbb"aaaa' | cut -d\" -f2
텍스트가 다음 이름의 파일에 있는 경우 filename
:
cut -d\" -f2 filename
명령 설명 cut
:
-d\"
cut
구분 기호가"
(\
is는 이스케이프에 사용됩니다. 그렇지 않으면 쉘이 닫히지 않은 따옴표에 대해 불평합니다)라고 알려주세요 .-f2
cut
두 번째 필드를 가져오라고 지시합니다 ("
위의 내용으로 구분됨).
답변2
sed
단지 명령의 "오른쪽"에 있는 내용을 출력하는 것이 아닙니다 s
. 이는 왼쪽 일치 항목을 오른쪽 항목으로 대체하고 결과 행(또는 보다 기술적으로 말하면 패턴 공간)을 출력합니다.
echo 'aa"bb"aa'|sed 's/"\(.*\)"/\1/'
정규식의 왼쪽은 과 일치합니다 "bb"
. 이는 캡처 그룹에서 캡처한 항목으로 대체됩니다 bb
. 따라서 출력은 aabbaa
.
위 내용은 다음과 일치함을 알려드립니다.
echo 'aa"bb"aa'|sed 's/.*"\(.*\)".*/\1/'
이 정규식은 전체 줄과 일치하므로 aa"bb"aa
로 대체됩니다 . bb
이것이 출력입니다.
또 다른 가능한 도구는 다음과 같습니다 awk
.
echo 'aa"bb"aa'|awk -F '"' '{print $2}'
이는 "
구분 기호로 사용되며 두 번째 필드를 인쇄합니다.
답변3
솔루션 을 원할 때 sed
다음과 결합된 솔루션이 있습니다 tr
.
echo 'aaaaaa"bbbbb"aaaa' | tr '"' '\n' | sed -n 2p
또는 다음을 사용하십시오 awk
.
echo 'aaaaaa"bbbbb"aaaa' | awk -F'"' '{print $2}'
(저는 여전히 을 선호합니다 cut
. 참조하세요.@GMaster의 답변).
답변4
grep
해결 방법(미리보기를 사용하므로 PCRE 옵션):
grep -oP '(?<=")[^"]*(?=")'