我这里有一个包含以下数据的 csv 文件
1,2,CC-12345678-20201120,6
1,3,CC-87654321-20201110,5
我需要将“CC-”之后的特定字符串替换为其最后 4 位数字
预期输出:
1,2,CC-5678-20201120,6
1,3,CC-4321-20201110,5
我正在尝试使用 awk 或 sed。谢谢
答案1
和sed
sed 's/CC-[^-]*\([^-]\{4\}\)/CC-\1/' file
或者使用扩展正则表达式更具可读性:
sed -E 's/CC-[^-]*([^-]{4})/CC-\1/' file
这将用最后四个非破折号s
替换以及任何后续数量的非破折号,后跟我们用 标记的四个字符。CC-
[^-]*
[^-]\{4\}
CC-
\(\)
答案2
使用sed
$ sed 's/\([^-]*-\)[0-9]\+\([0-9]\{4\}\)/\1\2/' input_file
1,2,CC-5678-20201120,6
1,3,CC-4321-20201110,5
答案3
和awk
:
awk -F- -v OFS=- '$1~/,CC$/{$2=substr($2, length($2)-3)}1' file
按 分割字符串-
,然后如果第一个字段以所需模式 ( ,CC
) 结尾,则获取最后 4 个字符。打印所有行 ( 1
)。