【问题标题】:Sed remove time stamp from file with regexSed 使用正则表达式从文件中删除时间戳
【发布时间】:2013-04-16 22:33:34
【问题描述】:

我正在尝试使用 sed 从 html 文件中删除模式。时间戳由一个 1-2 位数字、一个四个字母的单词和单词 ago 组成

示例:

25 mins ago

或:

1 hour ago

等等。我试过像这样使用 sed:

sed -i "s/([0-9]{1,2}) [a-z]* ago//g"

Sed 什么都不做,我不确定我的正则表达式是否错误,或者我是否没有以正确的方式转义字符。

编辑:我通过删除额外的空格来修复该表达式,感谢 choroba。现在 sed 从文件中删除大部分文本。表达式需要不那么贪婪吗?还应该提到时间戳被> <包围 示例:

>1 hour ago<

编辑:这对我有用。谢谢拉沃里。

sed -i 's/[0-9]\{,2\} [[:alpha:]]\{4,5\} ago//g'

感谢任何帮助!

【问题讨论】:

  • *后面有两个空格。
  • 谢谢,有帮助吗?它从文件中删除了所有文本。关于如何减少贪婪的任何想法?
  • 示例文件是什么样的,命令运行后的预期结果是什么?
  • 对表达式运行 sed 命令后要保留什么?是否保留&gt;&lt; 并删除中间的字符?
  • 它是一个 HTML 文件。我希望它会删除匹配 1-2 个数字的任何字符,然后是小时或分钟,然后是之前。

标签: regex linux bash sed


【解决方案1】:

试试下面的。您需要使用sed 转义量词元字符{}

echo "1 hour ago" | sed  's/[0-9]\{,2\} [[:alpha:]]\{4\} ago//g'

【讨论】:

  • 谢谢你这就像一个魅力,我不得不编辑它有点 sed -i 并使它成为 {4,5} 因为我是一个白痴,忘记了小时是 5 个字母长。谢谢!
  • sed -i 's/[0-9]\{,2\} [[:alpha:]]\{4,5\} 前//g'
【解决方案2】:
 echo "1 hour ago" | sed -e 's/.*ago$//g'

 sed -e 's/.*ago$//g' <filename>

这应该删除filename 中以ago 结尾的所有行

如果除了以ago 结尾的时间戳之外还有其他行,您可能不想使用它。你没有指定。

【讨论】:

  • 那不行,它需要是动态的,它的范围必须从 1 分钟到 59 和 1 小时到 24
  • 所以你也想删除Hello ago
  • @almyz125 : * 前面的 ago 照顾任何角色。正如 OP 所指出的,它也将删除whatever string ago。因此,从 1 到 60 分钟或从 1 到 24 小时的范围应该不是问题。
  • 知道了。但是以前不会删除我文件中的每个字符吗?我还应该提到,时间戳被 >Time Stamp Here<.> 包围
  • @almyz125 :您必须更具体地提出问题才能获得更具体的答案。
猜你喜欢
  • 2016-08-03
  • 2021-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-16
  • 2015-03-02
  • 2012-06-01
相关资源
最近更新 更多