![문자열의 중간 부분을 반환하려면 cut을 사용하세요.](https://linux55.com/image/6870/%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%98%20%EC%A4%91%EA%B0%84%20%EB%B6%80%EB%B6%84%EC%9D%84%20%EB%B0%98%ED%99%98%ED%95%98%EB%A0%A4%EB%A9%B4%20cut%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%84%B8%EC%9A%94..png)
stdout
다음과 같이 에코된 XML 문자열이 있습니다 .
<xml:attribute>{41c33a-4893b-3627a-617a}</xml:attribute>
{41c33a-4893b-3627a-617a}
이 경우 문자열을 반환하고 싶습니다. 컷을 사용하려고 하는데(파이핑을 두 번 할 수도 있음) 올바른 구문을 모르겠습니다. 나는 배쉬를 사용하고 있습니다.
답변1
cut
구분 기호를 정의하는 데 사용할 수 있는 옵션 -d
(결과 필드에서 제외):
echo "<xml:attribute>{41c33a-4893b-3627a-617a}</xml:attribute>" | cut -d\> -f2 | cut -d\< -f1
이는 >
두 번째 필드를 분할하여 출력하고 그대로 둔 {41c33a-4893b-3627a-617a}</xml:attribute
다음 <
첫 번째 필드를 다시 분할하여 출력합니다.
필드는 구분 기호 사이, 텍스트 시작과 첫 번째 구분 기호 사이, 마지막 구분 기호와 텍스트 끝 사이의 텍스트를 설명합니다. 원본 텍스트를 사용하면 >
다음과 같이 됩니다.
<xml:attribute
{41c33a-4893b-3627a-617a}</xml:attribute
- 빈 문자열
(구분자 생략) 그런 다음 <
필드 2에서 다음을 사용하여 제공됩니다.
{41c33a-4893b-3627a-617a}
/xml:attribute
필드 1은 당신이 찾고 있는 결과입니다.
답변2
간단한 문자열 조작의 경우 일반적으로 다음과 같은 쉘 자체 구성을 사용해야 합니다.매개변수 확장. 외부 유틸리티는 대량의 텍스트를 처리하는 데 더 적합하지만 단일 문자열의 경우 외부 도구 실행 속도가 느리고 올바르게 인용하기 어려울 수 있습니다.
mystring='<xml:attribute>{41c33a-4893b-3627a-617a}</xml:attribute>'
content="${mystring#*>}"; content="${content%<*}"
braced="${mystring#*\{}"; braced="${braced%%\}*}"; braced="{$braced}"
content
앞부분과 뒷부분을 제외한 원래 문자열로 설정합니다 <…>
. braced
첫 번째 부분처럼 보이도록 설정합니다 {…}
.
답변3
sed
정규식으로 지정된 필드를 추출 할 수도 있습니다 . 더 복잡한 일치 조건이 있는 경우 유용합니다.
echo '<xml:attribute>{41c33a-4893b-3627a-617a}</xml:attribute>' | \
sed -E 's/^.+>({.+})<.+$/\1/'
답변4
또는 를 사용하거나 필드 구분자로 awk
정규식을 사용합니다 .<|>
$ echo "<xml:attribute>{41c33a-4893b-3627a-617a}</xml:attribute>" |
awk -F '<|>' '{print $3}'
{41c33a-4893b-3627a-617a}
참고: GNU awk
, 및 로 mawk
테스트되었습니다 original-awk
. 작동 원리는 세 가지 모두 동일합니다.
이 perl
버전은 매우 유사합니다( perl
배열이 0부터 시작하고 명시적으로 지정하지 않는 한 perl
명령문 print
이 후행을 출력하지 않는다는 점 을 제외하면).\n
echo "<xml:attribute>{41c33a-4893b-3627a-617a}</xml:attribute>" |
perl -n -a -F'<|>' -e 'print $F[2],"\n"'
또한 참고하세요. 이는 단일 XML 조각을 포함하는 단일 입력 줄이므로 안정적으로 작동합니다. 정규식은 실제 XML을 안정적으로 구문 분석하는 데 사용할 수 없습니다. 예를 들어 XML 구문 분석 도구를 대신 사용하거나 , xmlstarlet
, 및 기타 언어에 대한 많은 XML 구문 분석 라이브러리 중 하나를 사용하십시오.perl
python