쉘 스크립트에서 두 문자열 사이의 단어를 추출하는 방법

쉘 스크립트에서 두 문자열 사이의 단어를 추출하는 방법

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

관련 정보