如何使用shell脚本从句子中删除停用词?

Abd*_*_98 5 bash shell sed tr

我想从文件中的句子中删除停用词?

停止词,我的意思是:
[I, a, an, as, at, the, by, in, for, of, on, that]

我在文件中有这些句子my_text.txt

Unix 系统设计的主要目标之一是创建一个促进高效程序运行的环境。

然后我想从上面的句子中删除停用词

我使用了这个脚本:

array=( I a an as at the by in for of on that  )
for i in "${array[@]}"
do
cat $p  | sed -e 's/\<$i\>//g' 
done < my_text.txt
Run Code Online (Sandbox Code Playgroud)

但输出是:

Unix 系统设计的主要目标之一是创建一个促进高效程序运行的环境。

预期的输出应该是:

设计 Unix 系统的一个主要目标是创建一个促进高效程序的环境

注意:我要删除 删除停用词 不是重复词?

Gil*_*not 3

像这样,假设$p是一个现有文件:

 sed -i -e "s/\<$i\>//g" "$p"
Run Code Online (Sandbox Code Playgroud)

您必须使用双引号而不是单引号来扩展变量。

开关在线-i更换。

学习如何在shell中正确引用,这非常重要:

“双引号”包含空格/元字符的每个文字和每个扩展:"$var", "$(command "$var")", "${array[@]}", "a & b"。用于'single quotes'代码或文字$'s: 'Costs $5 US'ssh host 'echo "$HOSTNAME"'. 请参阅
http://mywiki.wooledge.org/Quotes
http://mywiki.wooledge.org/Arguments
http://wiki.bash-hackers.org/syntax/words

最后

array=( I a an as at the by in for of on that  )
for i in "${array[@]}"
do
    sed -i -e "s/\<$i\>\s*//g" Input_File 
done
Run Code Online (Sandbox Code Playgroud)

奖金

尝试不\s*理解为什么我添加这个正则表达式