为什么sed会留下很多文件?

Vil*_*age 12 linux sed

我注意到我的目录中有很多文件,称为"sedAbCdEf"等.

  • 为什么要创建这些文件?
  • 脚本运行后这些是否有任何价值?
  • 我可以将这些文件发送到其他位置/tmp/吗?

更新:

我检查了脚本,直到找到了制作文件的脚本.以下是一些示例代码:

#!/bin/bash
a=1
b=`wc -l < ./file1.txt`
while [ $a -le $b ]; do
    for i in `sed -n "$a"p ./file1.txt`; do
        for j in `sed -n "$a"p ./file2.txt`; do
            sed -i "s/$i/\nZZ$jZZ\n/g" ./file3.txt
            c=`grep -c $j file3.txt`
            if [ "$c" -ge 1 ]
            then
                echo $j >> file4.txt
                echo "Replaced "$i" with "$j" "$c" times ("$a"/"$b")."
            fi
                echo $i" not found ("$a"/"$b")."
            a=`expr $a + 1`
        done
    done
done
Run Code Online (Sandbox Code Playgroud)

cct*_*tan 11

  • 为什么要创建这些文件?

sed -i "s/$i/\nZZ$jZZ\n/g" ./file3.txt

-i选项使sedstdout输出存储到临时文件中.
完成后sed,它将重命名此临时文件以替换原始文件file3.txt.
如果sed运行时出现问题,这些sedAbCdE临时文件将保留在那里.

  • 脚本运行后这些是否有任何价值?

您的旧文件未受影响.通常没有.

  • 我可以将这些文件发送到其他位置,例如/ tmp /?

是的,你可以,见上文.

编辑:请参阅此内容以进一步阅读.


jfs*_*jfs 5

如果您使用-i选项(这意味着在场内进行更改)sed写入临时文件,然后将其重命名为您的文件.因此,如果操作中止,则文件保持不变.

您可以看到哪些文件被打开,重命名为strace:

$ strace -e open,rename sed -i 's/a/b/g' somefile
Run Code Online (Sandbox Code Playgroud)

注意:somefile以只读方式打开.

似乎没有办法覆盖备份目录.GNU sed总是写在文件的目录(±symlinks)中.从sed/execute.c:

if (follow_symlinks)
  input->in_file_name = follow_symlink (name);
else
  input->in_file_name = name;

/* get the base name */
tmpdir = ck_strdup(input->in_file_name);
if ((p = strrchr(tmpdir, '/')))
  *(p + 1) = 0;
else
  strcpy(tmpdir, ".");
Run Code Online (Sandbox Code Playgroud)

前缀sed是硬编码的:

output_file.fp = ck_mkstemp (&input->out_file_name, tmpdir, "sed");
Run Code Online (Sandbox Code Playgroud)