您的问题(还)不是很清楚,尤其是因为您(还)没有显示您想要的输出。但是,如果目标是将方括号之间的所有斜线替换为(为了具体起见)破折号,则可以使用此 sed 脚本。
变体 A:单斜线
sed -e 's%^\(.*\[[^]/]*\)/%\1-%'
这将捕获 \(…\) 从行首 ^ 到方括号 \[ 后跟任意数量的非斜线、非右方括号 [^]/]* 的所有内容,所有这些都后跟一个斜线, 并将其替换为捕获的材料和破折号。
变体 B:多个斜杠
这需要一个sed 循环来重复替换:
sed -e ':again' -e 's%^\(.*\[[^]/]*\)/%\1-%' -e 't again'
第一个-e 参数创建一个标签again;第二个-e 参数是与以前完全相同的替换正则表达式;第三个-e 参数是有条件的跳转回标签again 如果进行了替换。
示例输出(变体 B)
$ echo "http://website/2015,4-5; Title; Description [23-01, Nr, 2015/4/5] / x23" |
> sed -e ':again' -e 's%^\(.*\[[^]/]*\)/%\1-%' -e 't again'
http://website/2015,4-5; Title; Description [23-01, Nr, 2015-4-5] / x23
$
结尾的/ x23 只是为了证明脚本所做的更改受方括号的限制。如果您添加几组带有斜线的方括号,那么所有这些斜线都将替换为破折号。
sed (GNU sed) 的某些版本可能允许您将三个 -e 表达式组合成一个参数。其他版本不会。显示的版本应该适用于sed 的任何版本。它也不使用扩展的正则表达式(因为它们并不急需,而且激活它们的选项在sed 的版本之间有所不同)。