【问题标题】:using sed to alter a phrase with spaces使用 sed 更改带有空格的短语
【发布时间】:2017-10-27 22:30:01
【问题描述】:

我是 linux 的新手,正在努力学习。我有一个文本文件,其中包含每天生成的日期,但日期都是固定的,所以我想通过运行 bash 脚本来更改文本文件中的特定日期。

我认为使用 sed 的语法:

sed -i 's/01 January 1970/27 October 2017/' 

但它似乎不起作用?

这是源文件行:

#01 January 1970:-JOB1011,Complete&Successful

这就是我希望它改造后的样子:

#27 October 2017:-JOB1011,Successful

有什么建议吗?

非常感谢!

【问题讨论】:

  • 你的命令对我有用。
  • 为什么要删除Complete&?那是复制错误吗?
  • 对我也有用,在命令末尾添加了重要的文件名。也许这与您的问题有关?
  • 我试过只更改日期,它有效!但是当我包含带有&符号的状态时,我认为我犯了一个错误。
  • 如果你想要一个文字&,你需要转义它。 \&

标签: linux bash sed


【解决方案1】:

如果您的数据文件是“x”,我希望

sed -i 's/01 January 1970/27 October 2017/' x

上班:

$ cat x
#27 October 2017:-JOB1011,Complete&Successful

如果这不是您看到的,您使用的是什么版本的 linux 和 sed?

$ sed --version
GNU sed version 4.2.1
...
$ uname -srv
Linux 2.6.32-696.6.3.el6.x86_64 #1 SMP Fri Jun 30 13:24:18 EDT 2017

【讨论】:

  • sed (GNU sed) 4.2.2 Linux 4.4.50-v7+ #970 SMP Mon Feb 20 19:18:29 GMT 2017 该语法适用于日期转换,但是如果我更改状态如果状态从成功变为 Complete&Successful 我得到这个:#27 October 2017 Complete01 January 1970Successful:-JOB1011,Complete&Successful 是 '&' 介绍这个吗?我该如何纠正它?
  • 正如上面@zzxyz 所说,& 有特殊含义,需要用\& 转义。它通常用于将长时间运行的进程置于后台,以便您恢复提示。它也是一些输出重定向操作的一部分(搜索“bash output redirection”)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-28
  • 1970-01-01
  • 2014-11-27
  • 1970-01-01
  • 2017-12-19
  • 1970-01-01
  • 2013-06-22
相关资源
最近更新 更多