【发布时间】:2011-12-05 17:50:10
【问题描述】:
我最近编写了一个执行 sed 命令的脚本,用于在名为“test.txt”的文件中将所有出现的“string1”替换为“string2”。
看起来像这样:
sed -i 's/string1/string2/g' test.txt
关键是,“string1”不一定存在于 test.txt 中。
我注意到在执行了一堆这些 sed 命令后,我得到了一些空文件,留在目录中,名称如下:
“sed4l4DpD”
有谁知道为什么会这样,我该如何纠正?
【问题讨论】:
-
不使用
-i选项时是否会发生这种情况? -
您不需要 -e 标志来将
s/.../.../g参数视为脚本吗? -
@okorz001:不,这里不需要
-e选项。 -
这些文件的数量与您执行的 sed 命令的数量相比如何?它与包含或不包含“string1”的文件数量相比如何(我怀疑这无关紧要)。你在什么操作系统上? sed 是否报告失败(在 bash 中检查
$?,或在 tcsh 中检查$status)?如果您有strace命令,请尝试使用它:strace -o sed.strace sed ...;它将显示系统调用的参数和结果。查找失败的write()或rename()呼叫。