Recursion 如何使用反向引用在BSD sed的同一行中添加(而不是更改)字符串?

Recursion 如何使用反向引用在BSD sed的同一行中添加(而不是更改)字符串?,recursion,sed,freebsd,Recursion,Sed,Freebsd,为了简化重复性任务,我喜欢编写shell脚本,这些脚本主要为我执行。我的一个最新脚本用于创建包含http下载URL的ed2k链接 我想要实现的一个例子是:假设我想将指定版本的Notepad++下载到我的共享文件夹中,我只需键入: ./dl-notepadpp.sh 6.0.0 我做到了下载所有文件并将其传递给alcc命令的地步;但是,它打印的是没有任何引用的普通ed2k链接 我基本上需要一个管道sed命令来打开alcc输出 ed2k://|文件| npp.6.0.0.bin.7z | 76311

为了简化重复性任务,我喜欢编写shell脚本,这些脚本主要为我执行。我的一个最新脚本用于创建包含http下载URL的ed2k链接

我想要实现的一个例子是:假设我想将指定版本的Notepad++下载到我的共享文件夹中,我只需键入:

./dl-notepadpp.sh 6.0.0

我做到了下载所有文件并将其传递给alcc命令的地步;但是,它打印的是没有任何引用的普通ed2k链接

我基本上需要一个管道sed命令来打开alcc输出

ed2k://|文件| npp.6.0.0.bin.7z | 76311 | 8b8298915a2670c3f11416ba95f78a88|/

进入

ed2k://|文件| npp.6.0.0.bin.7z | 76311 | 8b8298915a2670c3f11416ba95f78a88 |=http://download.tuxfamily.org/notepadplus/6.0.0/npp.6.0.0.bin.7z|/

自动地

当然,我不只是想要N++而不仅仅是一个文件,所以,从技术上讲,我需要一个sed命令来添加s=http。。。使用该行前面部分的文件名

我尝试在sed的替换字符串中使用$1,但它不起作用


有什么线索吗?

您可以在替换端的sed中使用\1来引用第一个记住的子模式$1在Perl中使用。我不清楚信息的http部分来自哪里;问题中当然没有具体说明。您可能希望在s///命令中使用除/以外的字符,例如:s%%%使用%而不是/。http部分因文件而异。我需要对每个脚本进行硬编码,但仍然需要使用文件中的版本号。我以为$1是脚本参数。-好吧,谢谢,我来摆弄一下。等一下;这取决于我们在谈论什么我可能误解了你的意思。如果是命令行中的版本号,则与任何shell一样为$1。要记住的主要一点是,如果用单引号编写sed脚本通常是个好主意,那么shell不会用脚本的参数替换$1。你应该表现出你最好的一面;这会让很多事情变得清楚。您还应该显示您得到的错误消息,或者您得到的结果,以及为什么它不是您想要的。啊,所以我必须在sed调用周围使用双引号?这也许可以解释我错了什么。双引号确实起到了作用谢谢实际上,我也是在将一部分alcc输出附加到字符串本身之后。我想没有比sed电话更优雅的解决方法了?