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

时间:2015-03-22 19:47:03

标签: linux bash terminal sh

我有这个任务要解决:

“编写一个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的终端上工作,它安装在我PC的另一个分区上。请帮我解决我的问题。谢谢!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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