如何使用 sed 用固定文本替换文件中每行末尾的模式?

Wil*_*mKF 3 regex sed

我想用这样的行比较两个大约 40 MB 的逗号分隔值的文件:

hstar,default,"T9883Z",0d59,c801,7332,5,20120914,4.343618767

对于这两个文件,上例中的最后一个条目4.343618767在两个文件之间有所不同,但几乎所有其他字段都相同。

我需要比较这两个文件以找到两个文件之间除最后一个以外的条目不同的几个地方。

我认为最简单的方法是使用 SED 处理两个文件并规范化最后一个字段,在第七个逗号之后查找数字模式并将其替换为固定字符串,例如 9.999999999 在每一行,然后是一个简单的差异将起作用。

但是,我不确定如何构造 sed 命令来定位第七个逗号并将剩余的字符串替换为固定字符串的行尾。这样的 sed 命令会是什么样子?我想我需要使用正则表达式,但不确定如何在第七个逗号之后开始模式。

cho*_*oba 7

您不必寻找第七列。只看最后一个:

sed 's/,[^,]*$/,9.9999999999/'
Run Code Online (Sandbox Code Playgroud)

解释:

,    match the comma
[    beginning of a character group
 ^   negation, i.e. do not match the following characters
 ,   comma
]    end of a character group
*    repeat the preceding thing zero or more times
$    match the end of line
Run Code Online (Sandbox Code Playgroud)