如何删除sed地址范围最后一行中的逗号?

如何删除sed地址范围最后一行中的逗号?,sed,Sed,我有一个文件,每行包含一个值,它以,结尾。我想删除所选地址范围最后一行中的,。我可以通过sed-n'1,3p'文件| sed'$s/,$/'实现以下功能,但是有更简单的方法吗 例如: '12345', '45322', '90456', '67895', ... '34552', 预期产出: '12345', '45322', '90456' 只需在一个sed调用中运行两个命令,即首先删除逗号的命令: $ cat input.txt foo, bar, baz, quux, $ sed -n

我有一个文件,每行包含一个值,它以
结尾。我想删除所选地址范围最后一行中的
。我可以通过
sed-n'1,3p'文件| sed'$s/,$/'
实现以下功能,但是有更简单的方法吗

例如:

'12345',
'45322',
'90456',
'67895',
...
'34552',
预期产出:

'12345',
'45322',
'90456'

只需在一个
sed
调用中运行两个命令,即首先删除逗号的命令:

$ cat input.txt
foo,
bar,
baz,
quux,
$ sed -n '3s/,$//; 1,3p; 3q' input.txt
foo,
bar,
baz
请注意,
s//
使用与要打印的范围结尾相同的行号,而不是
$


作为一种优化,在打印范围的最后一行后也会退出,而不是继续处理文件的其余部分(并且不做任何处理)。

只需在一个
sed
调用中运行这两个命令,即首先删除逗号的调用:

$ cat input.txt
foo,
bar,
baz,
quux,
$ sed -n '3s/,$//; 1,3p; 3q' input.txt
foo,
bar,
baz
请注意,
s//
使用与要打印的范围结尾相同的行号,而不是
$

作为一种优化,这也会在打印范围的最后一行后退出,而不是继续处理文件的其余部分(并且不做任何处理)。

使用GNU时:

sed -n '1,3{ 3s/,$//;p }' file
输出:

'12345', '45322', '90456' '12345', '45322', '90456' 缺点:
3
必须输入两次。

使用GNU时:

sed -n '1,3{ 3s/,$//;p }' file
输出:

'12345', '45322', '90456' '12345', '45322', '90456'

缺点:
3
必须输入两次。

所以你问怎么做,你知道怎么做?@KamilCuk我正在寻找一个更好的解决方案,不需要调用
sed
两次。你想保留3之后的行吗?@DavidC.Rankin不,我只需要选定范围内的行(前3行)。所以你问如何做某事,你知道如何做吗?@KamilCuk我正在寻找一个更好的解决方案,而不需要调用两次
sed
。你想保留3之后的行吗?@DavidC.Rankin不,我只需要选定范围内的行(前3行)。这不是什么缺点。。。。大致
sed'3s/,$/;3q'文件
sed'3!Bs/,$/;q'文件?这不是什么缺点。。。。大致
sed'3s/,$/;3q'文件
sed'3!Bs/,$/;q'file?如果第一个地址始终是
1
,那么
sed'3{s/,$//;q}
如果你打算在3行之后退出,为什么要使用
-n
p
?@poton如果行的实际范围不是从1开始呢?@Shawn
sed'10,15!d'文件
sed-n'10,15p'文件相同
在上述示例中,使用
sed-n'1,3p无法获得任何结果;3q'文件
甚至
sed-n'p;如果第一个地址总是
1
,那么
sed'3{s/,$//;q}
如果你打算在3行之后退出,为什么要使用
-n
p
?@poton如果行的实际范围不是从1开始呢?@Shawn
sed'10,15!d'文件
sed-n'10,15p'文件相同
在上述示例中,使用
sed-n'1,3p无法获得任何结果;3q'文件
甚至
sed-n'p;当
sed'3q'文件
达到相同结果时,3q'文件