提取大引号内的单词,但在用作撇号时保留它

Extract words within curly quotes but keep it when used as apostrophe

我有一个 UTF-8 文件,它有像这样的弯引号 ‘Awaara’,在某些地方使用了弯引号,例如 don’tdon't'。尝试将这些弯引号转换为单引号时会出现问题。转换为单引号后,如果不删除用作 don't , I'm.

的所有单引号,我将无法提取单引号单词 'Awaara'

目标:转换卷曲 --> 单引号,删除单引号但保留撇号单引号。

这是我编写的代码,它转换但无法删除单引号内的单词:

#!/bin/bash



cat  | sed -e "s/\’/'/g" -e  "s/\‘/'/g" | sed -e "s/^'/ /g" -e "s/'$/ /g" | sed "s/\…/ /g" | tr '>' ' ' | tr '?' ' ' | tr ',' ' ' | tr ';' ' ' | tr '.' ' ' | tr '!' ' ' | tr '′' ' ' | tr ':' ' ' | sed -e "s/\[/ /g" -e "s/\]/ /g" -e 's/(/ /g' -e "s/)/ /g" | tr ' ' '\n' | sort -u | uniq | tr 'a-z' 'A-Z' >our_vocab.txt

输出为:


'AWAARA ---> Should be AWAARA
25
50
70
800
A
AD
AI
AMITABH
AND
ANYWAY
ARE
BACHCHAN
BECAUSE
BUT
C++
CAN
CHECK
COMPUTER
DEVAKI
DIFFICULT
.
.
. 
HOON'   --> Should be HOON

您可以使用

sed -E -e "s/([[:alpha:]]['’][[:alpha:]])|['‘’]/\1/g" \
  -e 's/[][()>?,;.!:]|′|…/ /g' "" | tr ' ' '\n' | sort -u | \
  tr 'a-z' 'A-Z' > our_vocab.txt

参见online demo

我将几个 tr 命令合并为一个(第二个)sed 命令,并且 ([[:alpha:]]['’][[:alpha:]])|['‘’] 正则表达式删除了除字母之间的撇号之外的所有 '‘’ 撇号。