我有下面的替换sed脚本,它适用于每一行的第一次出现,但我试图让它适用于每行的前两次出现而不是一行(/ 1)或整行(/ g) ):
sed -r '2,$s/(^ *|, *)([a-z])/\1\U\2/1'
有没有办法通过组合sed命令或创建脚本来做到这一点?
答案 0 :(得分:2)
我能提供的最好的是
sed -r '2,$ { s/(^|,) *[a-z]/\U&/; s//\U&/; }'
\U&
技巧使用了空间的大写版本仍然是空格的事实;这是为了缩短重复次数。由于不再使用捕获,因此可以简化正则表达式。
在第二个s
命令中,//
是最近尝试的正则表达式的替身,所以第一个基本上是第二次执行(这次匹配最初的第二次)外观)。
由于/1
实际上没有做任何事情(替换第一次出现是默认的),我冒昧地删除它。