我该如何使用`sed`仅删除文件的第一行最后一个字符?
你可以例如使用这个:
sed '1 s/.$//' file
1
表示我们要执行操作的行。s/text/replacement/
,我们查找任何带有 .
后跟 $
的字符,表示行末。因此,我们查找行末前的最后一个字符,并将其替换为 Nothing。也就是说,我们删除了该行的最后一个字符。要编辑文件,您可以使用 -i.bak
。
$ cat a
hello this is some text
and this is something else
$ sed '1 s/.$//' a
hello this is some tex
and this is something else
为了好玩,让我们看看如何用 awk
实现这个目标:
awk -v FS= -v OFS= 'NR==1{NF=NF-1}1' file
该代码设置了输入和输出字段分隔符 (FS
, OFS
) 为空(与BEGIN{FS=OFS=""}
相同),因此每个字符都是一个字段。基于此,当记录为1时(在这种情况下,当我们在第一行时),将字段数(NF
)减少,以便最后一个字符被“丢失”。然后,1
是一个真条件,使得 awk
执行其默认操作: {print $0}
。
awk 'NR==1{sub(/.$/,"")}1' file
。赞一个 sed 命令和解释。 - Ed Mortonawk
方法不是一个好的(或至少正确的)方法吗?我认为这有点过度杀伤力了,而sed
(或其sub()
等效)非常快速,但我猜想“玩弄”NF
是否足够值得考虑 :) - fedorqui