이 bash 스크립트가 있습니다
#!/bin/bash
cat $@ | while read line
do
for word in $line
do
echo $word | circling-the-square
# here's where i need to add the if statement:
#if the word contains one of the four [!?.,],
#then also echo that punctuation mark
done
done
circling-the-square는 Norvig를 기반으로 한 Python 스크립트입니다.철자 교정기.
이 스크립트는 입력 시 구두점을 제거합니다.
def words(text): return re.findall('[a-z]+', text.lower())
그래서 나는 bash
이것에 주의를 기울일 필요가 있다. 나는 생각했거나 sed
작동 awk
할 수 있다고 생각했지만 정규식을 작성하는 방법이나 if 문에 넣는 방법을 여전히 모르기 때문에 여기에 질문합니다.
파일을 있는 그대로 전달
alec@ROOROO:~/oddi-o/newton-fluxions$ cat 199
advertisement lately publijtid by the author, the british hemisphere, or a map of a new contrivance, proper for initiating young minds in the firft rudiments of geography, and the ufe of the globes.
주어진
alec@ROOROO:~/oddi-o/newton-fluxions$ ./hmmb 199
advertisement
lately
publijtid
by
the
author
the
british
hemisphere
or
a
map
of
a
new
contrivance
proper
for
initiating
young
minds
in
the
first
rudiments
of
geography
and
the
few
of
the
globes.
완벽하지는 않지만 여전히 유용합니다.참고로\w
, 및 구두점 만 포함하도록 관련 파일을 편집했습니다 [!?.,]
. 파일에 : 또는 ; 같은 문자가 포함되어 있지 않습니다.이 네 개의 구두점을 에코하는 데만 필요합니다.단어의 일부로 포함되면 다음과 같습니다.
alec@ROOROO:~/oddi-o/newton-fluxions/finforno$ ./hmmb 199
advertisement
lately
publijtid
by
the
author,
the
british
hemisphere,
or
a
map
of
a
new
contrivance,
proper
for
initiating
young
minds
in
the
firft
rudiments
of
geography,
and
the
ufe
of
the
globes.
답변1
아래와 같이 정규식을 사용합니다. 하나 이상의 지정된 구두점을 포함하는 단어를 찾아 해당 단어와 첫 번째로 일치하는 구두점을 인쇄합니다. 필요에 따라 연장할 수 있습니다.
if [[ "$word" =~ ^.*([!?.,])+.*$ ]]
then
echo "Found word: $word containing punctuation mark: ${BASH_REMATCH[1]}"
fi
답변2
bash 정규식이 도움이 될 것 같습니다. 이 주제에 대한 Stackoverflow 토론:https://stackoverflow.com/questions/304864/how-do-i-use-regular-expressions-in-bash-scripts