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

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

我想要比较两个大小约为 40 MB 的以逗号分隔的值的文件,其行如下:

hstar,默认,"T9883Z ",0d59,c801,7332,5,20120914,4.343618767

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

我需要对这两个文件进行差异分析,以找出两个文件之间除最后一个条目之外的几个不同的地方。

我认为最简单的方法是使用 SED 处理这两个文件并规范化最后一个字段,查找第七个逗号后的数字模式并在每一行上用固定字符串(如 9.999999999)替换它,然后简单的差异就可以了。

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

答案1

你不必寻找第七列。只需找到最后一列:

sed 's/,[^,]*$/,9.9999999999/'

解释:

,    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

答案2

Awk 是一个处理表格数据更简洁的工具:

awk -F ',' ' { print $1,$2,$3,$4,$5,$6 }' file1 > temp1
awk -F ',' ' { print $1,$2,$3,$4,$5,$6 }' file2 > temp2
diff temp1 temp2

答案3

sed "s/,[0-9].[0-9]\+\$//" <yourfile>将输出如下行:

hstar,默认,“T9883Z”,0d59,c801,7332,5,20120914

相关内容