5.8. 测试和保存输出——runsed

未匹配的标注

5.8 测试和保存输出——runsed

runsed 这个 shell 脚本被开发用来使得对一个输入文件的改变持久化。换句话说,当你想输入文件和输出文件一致时,就可以使用它。就像 testsed 一样,它创建了一个临时文件,但是它进行了下一步,将这个临时文件覆盖原始文件。

for x
do
   echo "editing $x: \c"
   if test "$x" = sedscr; then
      echo "not editing sedscript!" 
   elif test -s "$x"; then 
      gsed -f sedscr "$x" > /tmp/"$x"$$
      diff "$x" /tmp/"$x"$$
      if test -s /tmp/"$x"$$
      then 
         if cmp -s "$x" /tmp/"$x"$$
         then
            echo "file not changed: \c"
         else
            mv "$x" "$x".bak  # save original, just in case
            cp /tmp/"$x"$$ "$x"
         fi
         echo "done"
      else 
         echo "Sed produced an empty file\c"
         echo " - check your sedscript."
      fi
      rm -f /tmp/"$x"$$
   else
      echo "original file is empty."
   fi
done
echo "all done"

要运行 runsed 需要在你想进行编辑的那个目录里面,创建一个名为 sedscr 的 sed 脚本。在命令行上提供要编辑文件的名称或多个文件的名称。 shell 元字符可以用来指定一系列的文件。 runsed 仅仅是对命名的文件调用了 sed -f sedscr,一次一个文件,然后将输出重定向到一个临时文件。 然后 runsed 测试这个临时文件,来确保在用它覆盖源文件之前,它是产生了输出的。

这个 shell 脚本的实质(第 9 行)实际上是和 testsed 一样的,多余的行是用来测试不成功的运行。比如当没有输出被产生,它比较两个文件来看是否有了改变,或看在覆盖原始文件之前,是否输出了一个空的文件。

然而 runsed 不会保证你的编辑脚本的完美,你需要在用 runsed 真正地让改变持久化之前,先使用 testsed 来验证这些改变。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 查看所有版本


暂无话题~