使用 sed 删除 txt 文件中的最后一个逗号或最后一个字符



我有一个逗号分隔的文件,如下所示

info,someinfo,moreinfo,123,

我想删除每行中的最后一个逗号。

我尝试了许多变体:

sed -i 's/.$//' filename

上面的命令似乎是互联网的主流意见,但它并没有以任何方式改变我的文件。

如果每行都包含,作为最后一个字母,您可以像这样删除

str="info,someinfo,moreinfo,123,"
echo ${str::-1}

输出:

 info,someinfo,moreinfo,123

希望这对你有帮助

最后一个逗号后可能有尾随空格。 您可以改用此命令,以便它很好地处理可选空格:

sed -i -E 's/,[[:space:]]*$//' file

我不确定您的意图是否是删除最后一个字符,无论它是否是逗号。

如果是 DOS rn行终止的文件,请同时删除r

$ cat file
info,someinfo,moreinfo,123,
$ unix2dos file
unix2dos: converting file file to DOS format...
$ sed 's/.r$//' file
info,someinfo,moreinfo,123

在 awk 中重新定义记录分隔符RS有条件地接受r。它将在输出中删除:

$ awk 'BEGIN{RS="r?n"}{sub(/.$/,"")}1' file
info,someinfo,moreinfo,123

如果你使用的是 GNU awk,你可以将r(有条件地(添加到输出中,并在print之前加上ORS=RT;,即:

$ awk '
BEGIN { RS="r?n" }  # set the record separator to accept r if needed
{
    ORS=RT            # set the used separator as the output separator
    sub(/.$/,"")      # remove last char
}1' file              # output
info,someinfo,moreinfo,123

你能试试这个吗: sed 's/(.)$//' file_name > filename_output

只需将输出重定向到新文件filename_output.

该命令删除最后一个字符,无论它是什么。如果只想删除逗号的最后一个字符,请尝试

sed -i 's/,$//' filename

这将保留其他行,因为正则表达式不匹配。

(-i选项无法正确移植;在 BSD 和 MacOS 上,您将需要-i ''

最新更新