【发布时间】:2020-05-30 20:29:38
【问题描述】:
我正在尝试使用“sed”命令删除与作为命令行参数给出的通配符模式匹配的文件的最后一行,并将文件从该目录移动到当前目录。代码如下:
DIR="/home/usr_name/trash/"
for file in "$@"
do
if [ $file != "-h" ] //ignore this line
then
temp="$DIR$file"
sed '$d' "$DIR$file"
mv $temp .
fi
done
代码正在移动文件,但没有执行“sed”命令来删除最后一行。将通配符设为 ab* ,会出现以下错误:
sed: can't read /home/usr_name/trash/ab*: No such file or directory
帮我弄清楚这种情况。
【问题讨论】:
-
@sergio ab* 表示我要移动所有名称以 ab 开头的文件。
-
顺便说一句:看看 sed 的选项
-i。 -
通配符由 shell 完成,"$DIR$file" 被引用,因此找不到文件。
-
所以,文件从垃圾箱 (
$DIR) 开始,应该由 sed 内联编辑,然后从垃圾箱移动到您运行脚本的目录? -
sed没有-i选项不会更改文件本身,它会将编辑后的版本发送到标准输出。我认为您要么需要使用sed -i(它进行就地编辑),要么使用sed '$d' "$DIR$file" >"$file"将垃圾文件留在原处并将编辑后的版本放在当前目录中。顺便说一句,有几个地方应该在变量引用周围加上双引号;我推荐shellcheck.net 指出这样的问题。
标签: linux bash shell sed wildcard