搜索然后将其替换为最后 4 个字符

搜索然后将其替换为最后 4 个字符

我这里有一个包含以下数据的 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)。

相关内容