如何删除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开始呢?@Shawnsed'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开始呢?@Shawnsed'10,15!d'文件
与sed-n'10,15p'文件相同
在上述示例中,使用sed-n'1,3p无法获得任何结果;3q'文件
甚至sed-n'p;当sed'3q'文件
达到相同结果时,3q'文件
。