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

San*_*dey 1 sed

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

fed*_*qui 8

例如,您可以使用此:

sed '1 s/.$//' file
Run Code Online (Sandbox Code Playgroud)

说明

  • 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
Run Code Online (Sandbox Code Playgroud)

为了好玩,让我们看看如何通过以下方式实现这一目标awk:

awk -v FS= -v OFS= 'NR==1{NF=NF-1}1' file
Run Code Online (Sandbox Code Playgroud)

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