【问题标题】:Extra characters error when using 'sed' in linux在linux中使用'sed'时出现额外字符错误
【发布时间】:2012-11-29 03:01:38
【问题描述】:

我的课程涉及编写一个 linux 脚本以从伪垃圾文件夹中“恢复”文件。我已经这样做了,它看起来应该工作,但它没有。相反,我收到一条错误消息:

sed: -e 表达式#1, char 2: 命令后的多余字符

但我不明白为什么,因为我没有在代码中的任何地方使用 -e 表达式。然而,我的大脑因为盯着代码看太久了,以至于它可能只是一个我看不到的愚蠢错误。任何帮助将不胜感激!

这是我的代码:

#!/bin/sh

if [ "$1" = "-n" ]
then

##if command is used with -n, prompts user to enter a new location for the file

  cd ~/my-documents/mydir01/trashbin
  restore=`sed "$2" ~/my-documents/mydir01/locations`
  name=`basename "$restore"`

  echo $name
  echo "Enter new location for this file."
  read loc
  echo $loc
  mv -i `"$name" "$newloc"/"$name"`

else

##file will be restored to its previous location

  cd ~/my-documents/mydir01/trashbin
  restore=`sed "$1" ~/my-documents/mydir01/locations`
  loc=`dirname "$restore"`
  echo $loc
  name=`dirname "$restore"`
  mv $1 $name
fi

【问题讨论】:

  • 可能是错误的,但我认为您可能必须将 name=direname "$restore" 移动 2 个空格才能保留在 if/fi 内
  • 使用您在一个答案的评论中给出的示例命令,sed 被称为sed "NewFile02" ~/my-documents/mydir01/locations,无论if 是否为真。其中N 是一个有效命令,它不带参数,下面的e 混淆sed。这就是错误的来源。基于此,我认为您并不真正了解sed 是什么,或者您不会给出这样的论点。

标签: linux sed


【解决方案1】:

您究竟是如何调用您的 shell 脚本的? sed 使用了 $1 和 $2 的值,看起来这可能是问题所在。

根据原始海报中的 cmets,似乎期望的最终目标是将原始文件的位置存储在 ~/my-documents/mydir01/locations 中,然后在文件需要时从那里检索它得到恢复。

执行此操作的一种方法是使用元组(例如键值对)来存储和检索此信息。例如,如果原始文件名为 X,新文件名为 Y,则在更改时,您将在位置文件中添加“X Y”。稍后,当您想要恢复文件时,您可以使用 X(或者可能是 Y)从位置文件中选择这一行(提示:使用 grep),然后使用 awk 或 perl(例如:awk '{print $1} ') 来选择行的第一部分。这样做会给你 X,这是你想要的,因为 X 是文件的原始名称。

总之,这个问题根本不是关于 sed 的。

祝你好运。

【讨论】:

  • 我只是用'restore [filename]'调用它
  • 您能否分享您正在使用它的确切命令,包括导致问题的文件名的特定值? [与 python 不同,shell 脚本中的间距无关紧要。] 另一个问题。一个使用 sed 来执行模式编辑。你到底用 完成了什么?
  • 我正在测试的命令是:restore NewFile02 sed 行应该从“位置”(文本文件)中检索文件的先前文件路径和名称我尝试使用 grep 代替,但我不能让它工作。
  • 所以我发现您正在使用的解决方案以及您要解决的问题存在一些问题。
  • 所以我看到您正在使用的解决方案和您试图解决的问题存在几个问题。当使用“-n”调用时,我认为您正在尝试记录(在....位置)正在移动的文件的原始名称。稍后,您从那里恢复文件。您能否详细说明为什么要使用 sed 来执行此操作?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-08
  • 2021-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-30
  • 2016-08-24
相关资源
最近更新 更多