【问题标题】:Inserting text with sed at start of line gives error在行首插入带有 sed 的文本会出错
【发布时间】:2020-01-06 09:33:23
【问题描述】:

我正在尝试使用 sed 修改文件,但收到一个我不理解的错误:

sed: -e 表达式#1, char 0: 没有之前的正则表达式

命令:

sed -e 's/^/"asset\//' example.txt

示例文件:

joe
john
peter

sed 来自 msys2:

which sed

sed 是外部的:C:\msys64\usr\bin\sed.exe

在每行的末尾添加文本时,以下内容将按预期工作:

sed -e 's/$/",/' y.txt

乔”,
约翰”,
彼得”,

我不明白这里出了什么问题。

【问题讨论】:

  • 嗯,它应该工作。能否请您发布sed --versionsed -v 的输出,看看您有什么sed?
  • sed (GNU sed) 4.7
  • 认为 Windows 对^ 做了一些奇怪的事情。如果您无法摆脱 Windows(不客气),请尝试将脚本放入文件中并使用 sed -f file y.txt

标签: sed quotes msys2


【解决方案1】:

编辑(cygwin 上的解决方案): 尝试在 cygwin sed 上进行操作,刚刚在系统上进行了测试,并且在命令提示符下运行良好。在将' 单引号与sed 一起使用时,我遇到了与OP 相同的错误,但是在sed 中使用" 时,我能够获得sed 的正确行为(预期一个,添加"在每一行之前)

sed -E "s/^/\"/"  Input_file


EDIT2(取自 Tripleee 的 cmets): 您还可以使用命令 s/^/\"/ 将 sed 命令保存到名为 file 的文件中,然后运行 ​​@987654331 @code by do,用cygwin sed测试成功。

sed -f file Input_file


替代解决方案(已测试并可在 cygwin 上运行):我没有 cygwin,因此无法对其进行测试,尽管您提到的解决方案适用于重击。您能尝试一下另一种方法吗?我刚刚也在 cygwin 上测试了这个解决方案,它在那里运行良好(编辑评论)。

sed 's/\(.*\)/"\1/' Input_file

【讨论】:

  • 选项一什么都不做。
  • @Gerhard,你想将输出保存到 Input_file 本身吗?因为这是在终端上为我打印正确的输出。
  • @Gerhard,现在请检查我的编辑答案,然后让我知道吗?两者都经过测试并且对我来说工作正常。
  • OK 选项 1 正在工作。看起来 windows 在使用单引号时对 ^ 做了一些事情。
猜你喜欢
  • 2020-06-11
  • 1970-01-01
  • 2021-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-14
  • 2011-05-04
相关资源
最近更新 更多