sed
특정 구분 기호 앞의 텍스트를 자르는 방법을 찾는 데 문제가 있습니다 .
내가 받은 출력은 echo
다음과 같은 결과를 반환합니다.
valueA=TEXT
sed
먼저 텍스트를 잘라내고 =
텍스트만 남기고 싶습니다 .
이를 수행하는 방법에 대한 제안이 있습니까?
답변1
다음을 사용할 수도 있습니다 cut
.
cut -d= -f2- <<< "$yourvar"
또는
some_command | cut -d= -f2-
-d=
구분 기호를 다음으로 설정하세요.=
-f2-
두 번째 필드와 아래의 모든 필드를 허용합니다.
답변2
@Archemar의 의견에 따르면 아마도 대답이 될 것입니다.
sed -e s/^[^=]*=//
@Baard Kopperud의 의견에 따르면 sed
명령은 다음과 같이 해석될 수 있습니다.
(^)로 시작하는 줄(s/)을 "="([^=])를 제외한 임의 개수의 문자(*)로 바꾸고 그 뒤에 등호 기호(= 없음(//) )를 붙입니다. 이렇게 하면 줄의 시작 부분부터 동등 노래를 포함하여 모든 내용이 제거되고 "=" 뒤에 오는 내용만 남습니다. 등호가 여러 개 있는 경우 "[^=]*"가 필요합니다... 첫 번째 등호만 제거하고 싶습니다. ".*"만 사용하면 정규식은 가능한 한 길고 "원하며" 가능한 한 왼쪽에서 시작하기 때문에 마지막 등호를 잘라내어 포함하게 됩니다.
답변3
나는 다음으로부터 출력을 받고 있다.
echo
변수로 구성하면 echo
셸에 내장된 문자열 조작 기능을 사용할 수 있습니다.
# Instead of value=$(echo "$var" | cut -d= -f2-)
value=${var#*=}
이것은 무엇 *=
이든 어울리는 전역 스타일 패턴입니다 *
. #
패턴이 변수에서 제거될 접두사와 일치함을 나타냅니다 .
이는 궁극적으로 에서 파이핑하는 것보다 더 빠르고 안정적입니다 . 왜냐하면 echo
을 유발할 수 있는 골치 아픈 문제 xpg_echo
(및 기타 구문 분석 문제 )를 방지 echo
하고 분기를 방지하기 때문입니다.
다음을 사용하여 키를 얻을 수도 있습니다.
key=${var%%=*}
욕심쟁이 %%
매칭이 아닌 매칭을 위해 사용된다는 점 참고해주세요 . %
그렇게 하면 =
잠재적인 문제로 인해 문제가 발생하지 않고 값에 서명됩니다.
구문은 , 아래에 설명되어 있습니다 man bash
.Parameter Expansion
${parameter#word} ${parameter##word} Remove matching prefix pattern. The word is expanded to produce a pattern just as in pathname expansion. If the pattern matches the beginning of the value of parameter, then the result of the expansion is the expanded value of parameter with the shortest matching pattern (the ``#'' case) or the longest matching pat‐ tern (the ``##'' case) deleted. If parameter is @ or *, the pattern removal operation is applied to each positional parame‐ ter in turn, and the expansion is the resultant list. If param‐ eter is an array variable subscripted with @ or *, the pattern removal operation is applied to each member of the array in turn, and the expansion is the resultant list. ${parameter%word} ${parameter%%word} Remove matching suffix pattern. The word is expanded to produce a pattern just as in pathname expansion. If the pattern matches a trailing portion of the expanded value of parameter, then the result of the expansion is the expanded value of parameter with the shortest matching pattern (the ``%'' case) or the longest matching pattern (the ``%%'' case) deleted. If parameter is @ or *, the pattern removal operation is applied to each posi‐ tional parameter in turn, and the expansion is the resultant list. If parameter is an array variable subscripted with @ or *, the pattern removal operation is applied to each member of the array in turn, and the expansion is the resultant list.