하이픈으로 연결된 단어의 텍스트 처리

하이픈으로 연결된 단어의 텍스트 처리

처리할 텍스트 파일(*.txt)이 있는데 "약물 관련", "약물 관련", "약물 관련" 등 하이픈으로 연결된 단어를 찾고 싶습니다.

첫 번째 항목을 "약물 관련"으로, 두 번째 항목을 "약물 관련"으로 변환하는 데 도움이 필요합니다. 파일에는 이와 같은 많은 용어가 있을 수 있습니다. 한 번에 "연결됨", "링크됨", "관련됨"이며 다른 용어가 있을 수 있습니다.

답변1

perl -pi.back -e 's/(\w+)-(\w+ed)\b/$2 with $1/g' ./*.txt

이는 이식 가능하며 perl설치된 모든 시스템에서 사용할 수 있습니다.

최근 GNU 시스템에서는 GNU를 사용하여 비슷한 작업을 수행할 수 있습니다 sed.

sed -ri.back 's/(\w+)-(\w+ed)\b/\2 with \1/g'

POSIX적으로:

for f in ./*.txt; do
  mv -i "$f" "$f.back" &&
    sed -e :1 -e 's/\([[:alnum:]]\{1,\}\)-\([[:alnum:]]\{1,\}ed\)\(\([^[:alnum:]].*\)\{0,1\}\)$/\2 with \1\3/;t1' < "$f.back" > "$f"
done

관련 정보