Sed 替换一定数量的事件
Sed to replace certain number of occurrences
我有下面的替换 sed 脚本,它适用于每行的第一次出现,但我试图让它适用于每行的前 2 次出现,而不是一个 (/1) 或整行 ( /g):
sed -r '2,$s/(^ *|, *)([a-z])/\U/1'
有没有办法通过组合 sed 命令或创建脚本来做到这一点?
我能提供的最好的是
sed -r '2,$ { s/(^|,) *[a-z]/\U&/; s//\U&/; }'
\U&
技巧利用了 space 的大写版本仍然是 space 的事实;这是为了使重复更短。因为不再使用捕获,正则表达式可以稍微简化一下。
在第二个 s
命令中,//
是最近尝试的正则表达式的替代品,所以第一个实际上是第二次执行(这次匹配最初的内容第二次出现)。
由于 /1
实际上没有做任何事情(默认替换第一个出现的地方),我冒昧地删除了它。
我有下面的替换 sed 脚本,它适用于每行的第一次出现,但我试图让它适用于每行的前 2 次出现,而不是一个 (/1) 或整行 ( /g):
sed -r '2,$s/(^ *|, *)([a-z])/\U/1'
有没有办法通过组合 sed 命令或创建脚本来做到这一点?
我能提供的最好的是
sed -r '2,$ { s/(^|,) *[a-z]/\U&/; s//\U&/; }'
\U&
技巧利用了 space 的大写版本仍然是 space 的事实;这是为了使重复更短。因为不再使用捕获,正则表达式可以稍微简化一下。
在第二个 s
命令中,//
是最近尝试的正则表达式的替代品,所以第一个实际上是第二次执行(这次匹配最初的内容第二次出现)。
由于 /1
实际上没有做任何事情(默认替换第一个出现的地方),我冒昧地删除了它。