αԋɱҽԃ αмєяιcαη Asked: 2018-07-04 12:56:04 +0800 CST2018-07-04 12:56:04 +0800 CST 2018-07-04 12:56:04 +0800 CST 编辑逗号分隔的字段 772 输入: 1,012018,111 2,1-2018,111 3,10-2018,111 输出: 1,01/2018,111 2,01/2018,111 3,10/2018,111 我怎样才能实现将月和年编辑为 mm/yyyy awk sed 3 个回答 Voted Best Answer steeldriver 2018-07-04T13:20:29+08:002018-07-04T13:20:29+08:00 使用 GNU Awk,patsplit用于将第二个逗号分隔字段拆分为最多两位十进制数字的子字段: $ gawk 'BEGIN{OFS=FS=","} {patsplit($2,a,/[0-9][0-9]?/); $2 = sprintf("%02d/%d%d", a[1], a[2], a[3])} 1' file 1,01/2018,111 2,01/2018,111 3,10/2018,111 如果 Perl 是一个选项 perl -F, -lpe ' $F[1] =~ s{(\d\d?)-?(\d+)}{sprintf "%02d/%d", $1, $2}e; $_ = join ",", @F ' file Nisha 2018-07-06T21:34:27+08:002018-07-06T21:34:27+08:00 sed -e 's/^(. ),(. ),(. )/\2/g' -e 's/([0-9]{1,2})([0-9]{4} )/\1-\2/g' 文件* s/^(. ),(. ),(.*)/\2/g - 基于逗号拆分并获得第二个值 s/([0-9]{1,2})([0-9]{ 4})/\1-\2/g - 在年份和月份之间拆分并插入 '-' Nisha 2018-07-07T00:18:55+08:002018-07-07T00:18:55+08:00 sed -e 's/^(. ),([0-9]{1,2})([0-9]{4}),(. )/\1,\2-\3,\4/ g'测试.txt ^(.*), = 捕获直到第一个 ',' 并存储在 \1 ([0-9]{1,2}) = 捕获 1 或 2 位数字并存储在 \2 ([0-9]{4}) = 捕获 4 didit no 并存储在 \3 ,(.*) \4 = 从 ',' 中捕获其余部分并将其存储在 \4 并相应地更换
使用 GNU Awk,
patsplit
用于将第二个逗号分隔字段拆分为最多两位十进制数字的子字段:如果 Perl 是一个选项
sed -e 's/^(. ),(. ),(. )/\2/g' -e 's/([0-9]{1,2})([0-9]{4} )/\1-\2/g' 文件*
s/^(. ),(. ),(.*)/\2/g - 基于逗号拆分并获得第二个值 s/([0-9]{1,2})([0-9]{ 4})/\1-\2/g - 在年份和月份之间拆分并插入 '-'
sed -e 's/^(. ),([0-9]{1,2})([0-9]{4}),(. )/\1,\2-\3,\4/ g'测试.txt