我有一些文本,我想用一个实际的链接来代替。
案文如下:
Some text here
[...]
- CRAN Task View: [Bayesian](Bayesian.html)
- CRAN Task View: [Cluster](Cluster.html)
- CRAN Task View: [Databases](Databases.html)
- CRAN Task View: [Environmetrics](Environmetrics.html)
[...]
End of text here但是正如您所看到的,没有指向页面的HTML链接。例如,Bayesian.html应该是http://cran.rstudio.com/web/views/Bayesian.html
最终结果应该是
Some text here
[...]
- CRAN Task View: [Bayesian](http://cran.rstudio.com/web/views/Bayesian.html)
- CRAN Task View: [Cluster](http://cran.rstudio.com/web/views/Cluster.html)
- CRAN Task View: [Databases](http://cran.rstudio.com/web/views/Databases.html)
- CRAN Task View: [Environmetrics](http://cran.rstudio.com/web/views/Environmetrics.html)
[...]
End of text here到目前为止,我能够使用以下命令“子集”我的文本文件:
grep "CRAN Task View: \[" $FILE但当我试着说这句话时:
sed -e 's|\\([a-zA-Z]*\\)\\.html|http://cran.rstudio.com/web/views/\\1.html|'它不起作用。如何能够从grep命令内联sed?
我在macOS莫哈韦。
发布于 2021-04-16 18:18:06
这个sed应该适用于您:
sed -E '/CRAN Task View:/s~\(([^)]+)\)~(http://cran.rstudio.com/web/views/\1)~' file
Some text here
[...]
- CRAN Task View: [Bayesian](http://cran.rstudio.com/web/views/Bayesian.html)
- CRAN Task View: [Cluster](http://cran.rstudio.com/web/views/Cluster.html)
- CRAN Task View: [Databases](http://cran.rstudio.com/web/views/Databases.html)
- CRAN Task View: [Environmetrics](http://cran.rstudio.com/web/views/Environmetrics.html)
[...]
End of text hereRegEx详细信息:
/CRAN Task View:/:只在行匹配文本"CRAN Task View:"s~:Substitute\(:匹配(([^)]+):匹配组#1\):匹配的1+非)字符的情况下才会替换使用反向引用#1创建链接的)
(http://cran.rstudio.com/web/views/\1)。发布于 2021-04-16 18:11:28
,
sed -e 's|\\([a-zA-Z]*\\)\\.html|http://cran.rstudio.com/web/views/\\1.html|',它不工作。
这是一个引证问题。在单引号中,'...'反斜杠\不需要转义。Bash将'\\('解析为\\(,并将其发送给sed,后者将其解释为文字字符串\(。因此,您要替换文件中从未出现的文字字符串\(someLetters\)\.html " "。
你可能是说sed 's|\([a-zA-Z]*\)\.html|http://cran.rstudio.com/web/views/\1.html|'。
顺便说一句:sed也可以为您完成grep部分。另外,对于-E,您需要更少的反斜杠。但是,由于再次追加.html,所以首先不需要组\(....\)。
sed -E -n '/CRAN Task View: \[/s|[a-zA-Z]*\.html|http://cran.rstudio.com/web/views/&|p'https://stackoverflow.com/questions/67129993
复制相似问题