使用 sed 从给定文件中删除单词

Delete words from given files with sed

我有这个作业要解决:

"编写一个shell脚本,不断从键盘读取单词并 从命令行中给出的所有文件中删除它们。"

我已经尝试解决了,这是我的尝试:

#!/bin/bash

echo "Enter words"
while (true)

do
        read wrd
        if [ "$wrd" != "exit" ]
        then
                for i in $#
                do
                        sed -i -e 's/$wrd//g' $i
                done
        else
        break
        fi
done

这是我在引入命令后收到的错误:./h84a.sh fisier1.txt

Enter words
suc
sed: can't read 1: No such file or directory

对不起,如果我不是很具体,这是我第一次在这里发帖。我正在 Linux Mint 的终端上工作,它安装在我电脑的另一个分区上。请帮我解决我的问题。谢谢!

$# 扩展为参数的数量(在本例中为 1)

您可能打算使用 $*"$@"

我认为你可以大大简化你的脚本:

#!/bin/bash

echo "Enter words"

while read -r wrd
do
    [ "$wrd" = exit ] && break
    sed -i "s/$wrd//g" "$@"
done

一些关键变化:

我建议您注意使用 -i 开关进行就地编辑。在某些版本的sed中,可以指定备份文件的后缀,如-i.bak,这样原文件就不会丢失。

如果您不熟悉语法 [ "$wrd" = exit ] && break,它在功能上等同于:

if [ "$wrd" = exit ]
then break
fi