从bash中的句子中删除特定单词?

sam*_*123 3 bash shell sed

我想使用 bash 脚本从句子中删除否定词。

我的意思是消极的话:

[dull,boring,annoying,bad]
Run Code Online (Sandbox Code Playgroud)

我的文件文本text.txt包含这句话:

These dull boring cards are part of a chaotic board game ,and bad for people 
Run Code Online (Sandbox Code Playgroud)

我正在使用这个脚本

array=( dull boring annoying bad  )
for i in "${array[@]}"
do
cat $p  | sed -e 's/\<$i\>//g' 
done < my_text.txt
Run Code Online (Sandbox Code Playgroud)

但是我得到了以下错误的结果:

These boring cards are part of a chaotic board game ,and bad for people 
Run Code Online (Sandbox Code Playgroud)

正确的输出必须是这样的:

These cards are part of a chaotic board game ,and for people 
Run Code Online (Sandbox Code Playgroud)

Abd*_*_98 6

首先,假设 $p 是存在的文件然后使用这个脚本

while read p 
do 
  echo $p | sed  -e 's/\<dull\>//g' | sed -e 's/\<boring\>//g' | sed -e 's/\<annoying\>//g'|sed -e 's/\<bad\>//g' > my_text.txt
  
 cat my_text.txt
 
done < my_text.txt

Run Code Online (Sandbox Code Playgroud)

此脚本的输出:

These  cards are part of a chaotic board game ,and  for people

Run Code Online (Sandbox Code Playgroud)

或者可以使用这个脚本,你必须使用双引号,而不是单引号来扩展变量。

array=( dull boring annoying bad )
for i in "${array[@]}"
do
    sed -i -e "s/\<$i\>\s*//g" my_text.txt
done
Run Code Online (Sandbox Code Playgroud)

sed -i开关在线替换。
sed -e脚本添加到要执行的命令中。

要了解有关可以在终端中使用的 sed 命令的更多信息 man sed

  • 这个问题的解决方案不止一种,您提出的解决方案也很好,感谢您给我提供的重要评论。 (4认同)
  • 在链或循环中运行多个静态“sed”脚本暴露了对“sed”理解的根本缺乏。毕竟,它是一种脚本语言,尽管是一种原始的语言。 (2认同)