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

标签 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 的另一个分区上。请帮我解决我的问题。谢谢!

最佳答案

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

#!/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

关于linux - 使用 sed 从给定文件中删除单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29199046/

相关文章:

linux - echo 在 linux 系统的 cron 作业中打印

python - 如何转置特定行并在 unix 或 python 中以以下格式显示数据

bash - bash shell 脚本中的数组

arrays - 如何在bash中将元素存储到数组

linux - Bash - 意外 token `fi'

终端 - 清除半屏

c - 终端驱动程序缓冲区是否存储用户输入的字符?如果是这样,如何访问这些内容?

linux - 红帽企业版配置参数

php - 他们有免费的 PHP 库可以将 PPT 或 ODT 转换为 PDF

bash - 如何在 shell 脚本中进行整数比较的逻辑或运算?