例子:
1:20 2:25 3:0.432 2:-17 10:12
我想替换所有以to开头的字符串。2:
2:0
输出:
1:20 2:0 3:0.432 2:0 10:12
使用sed
:
sed -E 's/((^| )2:)[^ ]*/\10/g' in > out
此外,作为灵感souravc的回答,如果不是一的机会,2:
子字符串开始后不含有导致2:
子串(例如有没有一个的机会1:202:25
串,下列哪缩短命令将取代于1:202:0
)时,命令可能会缩短为:
sed -E 's/2:[^ ]*/2:0/g' in > out
命令 #1 / #2 细分:
-E
:sed
将模式解释为 ERE(扩展正则表达式)模式;> out
: 重定向stdout
到out
;sed
命令 #1 故障:
s
: 断言执行替换/
: 开始模式(
: 启动捕获组(
: 开始对允许的字符串进行分组^
: 匹配行的开头|
: 分隔第二个允许的字符串
: 匹配一个
字符)
: 停止对允许的字符串进行分组2
: 匹配一个2
字符:
: 匹配一个:
字符)
: 停止捕获组[^ ]*
: 匹配任意数量的字符,不匹配
/
: 停止模式/开始替换字符串\1
: 反向引用替换为第一个捕获组0
: 添加一个0
字符/
: 停止替换字符串/启动模式标志g
: 断言全局执行替换,即替换行中模式的每次出现sed
命令#2 分解:
s
: 断言执行替换/
: 开始模式2
: 匹配一个2
字符:
: 匹配一个:
字符[^ ]*
: 匹配任意数量的字符,不匹配
/
: 停止模式/开始替换字符串2:0
: 添加一个2:0
字符串/
: 停止替换字符串/启动模式标志g
: 断言全局执行替换,即替换行中模式的每次出现本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句