【问题标题】:Replace non-standard URL patterns inside text file using unix or python使用 unix 或 python 替换文本文件中的非标准 URL 模式
【发布时间】:2021-09-17 13:35:47
【问题描述】:

我有一个包含许多行的文本文件,其中包含如下所示的 URL:

http // t . co / gjut7iu89o

我想将这整个部分标记为 URL

URL 部分在文本之间,所以我不能只删除 http 之后的所有内容,我在这里尝试过:

sed -i 's/\https.*/URL/' filename

那是删除 url 之后的所有内容,这不是我想要的。

我尝试使用sed re,但无法获得删除文本文件中此模式的逻辑

【问题讨论】:

  • 期望的输出是什么?你能编辑这个问题吗?谢谢
  • 这是您要查找的内容:'http // t . co / gjut7iu89o'.replace(' ', '').replace('//', '://').replace('p:', 'ps:')?

标签: regex linux bash unix sed


【解决方案1】:

您有一个如下所示的文本文件:

一些文本你好 http // t 。 co / lorem 这是 带有 http // t 的文本文件。 co / ipsum 多行 和网址 http // t 。 co / 随处可见

你希望它看起来像这样:

一些文本你好 URL 这是 带有多行 URL 的文本文件 和 url 到处都是 URL

如果我的理解是正确的,并且如果这些都是 t.co 链接或者在最后的 / 之后只有一个单词,您可以将匹配限制在最后的 / 之后的一个单词。这将与 GNU sed 和 -r 选项一起使用

sed -r -i 's/https?.*\/\s*\w*/URL/g' filename

用于其他工具的正则表达式部分是:

/https?.*\/\s*\w*/
  • s?:可选s
  • .*\/: 一切都在转义/
  • \s*:任意数量的连续空格(或无)
  • \w*: 一个或多个连续的正则表达式字符

这将产生如上所需的输出

【讨论】:

  • 嗨!想确认,但标志不应该是-r(小写)而不是-R
  • @nigel 非常感谢。确实。我也是这么想的,直到检查确定为止。只是刚才你提到它,我看起来更深入一点,发现我的sed 当前链接到被取代。马上更新
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-27
  • 1970-01-01
  • 1970-01-01
  • 2013-06-26
  • 1970-01-01
  • 2012-04-22
  • 2011-02-26
相关资源
最近更新 更多