sed 命令执行不正确

用户9924807

我是 Bash 的新手,并尝试使用sed. 考虑这个简单的例子:

#!/bin/bash

shopt -s extglob
file="/root/test.txt"

# Modify the file.
sed "s/apple/orange/g" $file -> $file.tmp && mv $file.tmp $file

我运行脚本,它挂起。查看目录:

ls
test.sh test.txt test.txt.tmp

节目test.txt.tmp已创建,但mv无法正常工作。

脚本有什么问题?

克万图尔

问题出在以下行中:

sed "s/apple/orange/g" $file -> $file.tmp && mv $file.tmp $file

Bash 将此行解释为:

sed "s/apple/orange/g" $file - > $file.tmp && mv $file.tmp $file

注意的细微差别(之间的空间->)。

现在,发生了什么?所述-<连字符>被解释为是一个文件。更具体地说/dev/stdin这意味着sed正在等待来自 的输入/dev/stdin这也是它挂起来的原因。它实际上不是挂起而是在等待输入。文件$file.tmp已创建,但由于sed命令仍在执行,因此mv未发生。

如果未指定文件操作数,则应使用标准输入,如果文件操作数是,并且-实现将其-视为标准输入的含义,则应使用标准输入。否则,不得使用标准输入。请参阅输入文件部分。

来源:POSIX sed 标准

还相关:使用破折号代替文件名

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章