使用sed如何仅在第一行中删除最后一个字符

时间:2014-08-25 12:33:46

标签: sed

如何使用sed从文件的第一行删除最后一个字符?

1 个答案:

答案 0 :(得分:8)

例如,你可以使用它:

sed '1 s/.$//' file

解释

  • 1表示我们要执行操作的行。
  • 根据语法s/text/replacement/,我们会查找.后跟$的任何字符,表示行尾。因此,我们在行尾之前查找最后一个字符,并将其替换为空。也就是说,我们删除了该行的最后一个字符。

要编辑文件,您可以使用-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

这会将输入和输出字段分隔符(FSOFS)设置为空(与BEGIN{FS=OFS=""}相同),因此每个字符都是一个字段。基于此,当记录为1时(在这种情况下,当我们在第1行时),减少字段数(NF),以便最后一个字符"丢失"。然后,1是一个真正的条件,使awk执行默认操作:{print $0}