Shellscript에서 두 문자열 사이의 텍스트를 추출하고 싶습니다. 아래 문자열에서 "요약:"과 "도착 위치" 사이의 텍스트를 추출하고 싶습니다.
mySTring="Summary: New Arrival Arrived At:11/8/2018, 01:38:00 P.M."
이것이 어떻게 달성될 수 있습니까?
답변1
요구사항을 엄격히 따르면서 텍스트가 이미 변수에 있다고 가정하면 다음을 수행합니다.
s="Summary: New Arrival Arrived At:11/8/2018, 01:38:00 P.M."
s="${s#*Summary:}"
s="${s%% Arrived At*}"
printf '%s\n' "$s"
...그러나 데이터 뒤에 항상 공백이 있는 경우 Summary:
해당 공백도 제거하는 것이 좋습니다.
s="${s#*Summary: }"
s="${s%%Arrived At*}"
...앞에 공백이 있는 경우 이전과 동일합니다 Arrived At
.
s="${s#*Summary: }"
s="${s%% Arrived At*}"
답변2
grep 및 Perl Regex를 사용하여 동일한 효과를 얻을 수 있습니다.
$ echo "$mySTring" | grep -Po "Summary: \K(.*)(?= Arrived )"
New Arrival
\K: grep은 패턴과 일치하도록 \K 이전의 모든 항목을 유지하지만 인쇄할 때는 제외됩니다.
?=는 캡처할 괄호 안의 해당 부분이 뒤에 와야 하는 전방 예측 캡처이지만 최종 출력은 인쇄되거나 추출되지 않습니다.
답변3
$ mySTring="Summary: New Arrival Arrived At:11/8/2018, 01:38:00 P.M."
$ echo ${mySTring}
Summary: New Arrival Arrived At:11/8/2018, 01:38:00 P.M.
$ echo ${mySTring} | sed "s/.*Summary://;s/Arrived.*//"
New Arrival
bash를 사용하여 이 작업을 수행하려면 다음을 시도하십시오.
mySTring="Summary: New Arrival Arrived At:11/8/2018, 01:38:00 P.M."
mySTring=${mySTring#*:}
$ echo ${mySTring}
New Arrival Arrived At:11/8/2018, 01:38:00 P.M.
$ echo ${mySTring%%Arrived*}
New Arrival
$ mySTring=${mySTring%%Arrived*}
$ echo ${mySTring}
New Arrival
Bash의 문자열 조작 -https://www.tldp.org/LDP/abs/html/string-manipulation.html