使用 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
一些关键变化:
- sed 命令两边的双引号是必不可少的,因为 shell 变量不会在单引号内展开
- 可以使用
"$@"
一次将所有文件名传递给 sed,而不是使用循环
read -r
is almost always what you want to use
我建议您注意使用 -i
开关进行就地编辑。在某些版本的sed中,可以指定备份文件的后缀,如-i.bak
,这样原文件就不会丢失。
如果您不熟悉语法 [ "$wrd" = exit ] && break
,它在功能上等同于:
if [ "$wrd" = exit ]
then break
fi
我有这个作业要解决:
"编写一个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
一些关键变化:
- sed 命令两边的双引号是必不可少的,因为 shell 变量不会在单引号内展开
- 可以使用
"$@"
一次将所有文件名传递给 sed,而不是使用循环
read -r
is almost always what you want to use
我建议您注意使用 -i
开关进行就地编辑。在某些版本的sed中,可以指定备份文件的后缀,如-i.bak
,这样原文件就不会丢失。
如果您不熟悉语法 [ "$wrd" = exit ] && break
,它在功能上等同于:
if [ "$wrd" = exit ]
then break
fi