假设我有类似的东西:
echo "bLah BLaH blAH" | sed -r 's/([a-zA-Z ]+)/\L&; s/[a-z]/\u&/g'
sed 的典型用法是将“疯狂大小写”字符串转换为混合大小写(第一个字母大写,其余字母小写)
但是,这将始终影响整个字符串。例如,如果我想解析各种风格的“疯狂”mp3 文件名($tracknr - $artist - $title 与 $artist - $tracknr - $title),事情会变得更加复杂,因为有时标题是外语的像法语和混合大小写在法语或意大利语中看起来很糟糕。这就是为什么我只想继续直到达到某个分隔符,例如空格-破折号-空格。
因此,我想使用组合的 's/.../...' 表达式来一步一步地做事。但是,如果有一种方法可以从 PREVIOUS 表达式中“存储”子表达式,让我能够将保留的子匹配用作下一个 sed 替换表达式的源表达式,那就太好了。
如果您认为无论如何都可以使用 OOTB,那您就错了。您只是不能在分号后的第二个表达式中使用 '\1' 语法来引用前一个表达式的子表达式(当然,一旦您在第二个表达式本身中定义了子表达式,它就可以工作,但现在不考虑这种可能性)。在我的情况下,解析器不知道,你会得到错误
sed: -e expression #1, char (xx): invalid reference \1 on `s' command's RHS
有什么东西可以执行这种事情吗?