使用sed给空格分隔的URL添加引号遇到问题求助
解决空格分隔URL添加引号的问题
原sed命令的问题分析
你的sed命令失效主要有3个原因:
- POSIX基本正则(sed默认使用)不支持Python正则里的
?非贪婪量词,.*会默认贪婪匹配到最后一个空格,导致只处理第一个URL的部分内容 [:space:]是POSIX字符类,必须放在[]内才能生效(即[[:space:]]),否则会被解析为匹配s/p/a/c/e/:这些单个字符,而非空格- 替换时用
\"完全没必要,直接使用双引号即可,Windows环境下只需注意转义规则
修正后的sed命令(Gow环境)
在Windows命令行中,执行以下命令即可正确给每个空格分隔的URL添加引号:
sed "s/\(https[^[:space:]]*\)/\"\1\"/g" elenco.txt
https[^[:space:]]*:匹配以https开头、后续连续非空格的字符(精准定位单个URL,替代非贪婪匹配的效果)\"\1\":将匹配到的URL用双引号包裹,Windows环境下需要转义双引号- 加上
g标记确保替换所有匹配项,而非仅第一个
无需额外工具的Windows原生方案(PowerShell)
如果你不想折腾sed的正则规则,直接用Windows自带的PowerShell就能完成,更简单直观:
Get-Content .\elenco.txt | ForEach-Object { $_ -replace 'https\S+', '"$&"' } | Set-Content .\elenco_quoted.txt
\S+匹配连续非空白字符,对应单个URL$&表示正则匹配到的完整内容,直接替换为带引号的格式- 命令会读取原文件内容,处理后写入新文件
elenco_quoted.txt
内容的提问来源于stack exchange,提问作者Signor Pizza
相关产品推荐
相关产品推荐

