我正在尝试编写一个正则表达式,以便查找分散在多个文件中的数据,如下所示:
[Something here](HTTP://somesite.com)
[DifferentStuff](HTTPS://Another.org)
[yetagain](HTTP://elsewhere)
我想要的是只保留两个方括号内的数据,就像这样
Something here
DifferentStuff
yetagain
实际情况是,包含 HTTP:// 或 HTTPS:// 至关重要,因为文档中还有其他类似的条目,它们不指向我不希望更改的外部站点。此外,我希望编辑的数据可能位于以标点符号结尾的句子的末尾、以大写字母开头的句子的开头或句子的中间,这可能会导致出现双空格字符。
我不确定,但我认为如果是这种情况,将数据保留在括号中会自动保持首字母大写,并且如果在句子末尾,标点符号也不应该成为问题。只是正则表达式本身我似乎无法正确使用,并且最终可能会出现一堆双空格字符。
以下是我尝试过但不起作用的几个表达式。请注意,虽然我确实需要确保只编辑包含 HTTP(S):// 的表达式,但我在很多尝试中都省略了这一点,只是为了更进一步:
([[^]]+]()((http|https)://[^)]+))
([([^]]+)](([^)]+)))
[([^[]]+)](([^)]+))
[[^[]]*](.+)
[([^[]]+)](.+)
([([^[]]+)](.+))
[([^[]]+)](.+)
任何帮助将不胜感激。
答案1
使用awk
示例HTTP
和HTTPS
搜索即可完成。命令如下:
awk -F'[(:]' '$2=="HTTP" || $2=="HTTPS" {gsub("\\[",""); gsub("\\]","");print $1}' <input file>
-F
设置分隔符,然后搜索第二个标记是否为HTTP
或HTTPS
,删除方括号,然后打印第一个标记
使用纯正则表达式,您可以尝试类似以下操作:
\[(.+?)\]\((HTTPS|HTTP):\/\/.*
或者
\[(.+?)\]\(HTTPS?:\/\/.*
您可以检查解释和执行这里。
答案2
我很抱歉,以后我会尽量说得更清楚。同时,我通过反复试验,独立找到了答案。下面的方法很有效。
寻找:\[([^\[\]]+)\]\((https?://)[^)]+\)
代替:$1
谢谢大家的帮助...这让我开始思考!