sed 笔记

目录

问题

将文本中偶数位置的冒号改为逗号。

输入:

34:40031:12635:suc:1:40093:4:40086
34:40031:15658:suc
29:40031:17066:suc:3:40086

期望输出:

34:40031,12635:suc,1:40093,4:40086
34:40031,15658:suc
29:40031,17066:suc,3:40086

解决方案

方案 1:使用 awk

awk -vRS=':' 'ORS=NR%2?",":":'

: 设为记录分隔符,根据行号奇偶决定输出分隔符。

方案 2:使用 sed(推荐)

sed -r 's/(:[^:]*):/\1,/g'

匹配冒号后跟任意非冒号字符再跟冒号的模式,将第二个冒号替换为逗号。

正则说明

  • (:[^:]*) 是第一个捕获组(用 \1 引用),匹配冒号和其后的非冒号字符
  • \1 表示引用第一个捕获组的内容
  • 可使用多个括号分组,依次用 \1\2 等引用

#shell-scripting