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

6l7fqoea  于 2023-02-04  发布在  Unix
关注(0)|答案(5)|浏览(322)

我有一个逗号分隔的文件

info,someinfo,moreinfo,123,

我想去掉每行最后一个逗号。
我已经尝试了许多变体:

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

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

6ss1mwsb

6ss1mwsb1#

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

str="info,someinfo,moreinfo,123,"
echo ${str::-1}
    • 输出:**
info,someinfo,moreinfo,123

希望这对你有帮助

gudnpqoy

gudnpqoy2#

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

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

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

txu3uszq

txu3uszq3#

如果是DOS \r\n行终止文件,请同时删除\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
mrwjdhj3

mrwjdhj34#

你能试试这个吗:sed 's/\(.\)$//' file_name > filename_output
只是将输出重定向到一个新文件filename_output

5q4ezhmt

5q4ezhmt5#

该命令将删除最后一个字符,而不管它是什么。如果只想删除最后一个逗号字符,请尝试

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

这将使其他行保持原样,因为正则表达式不匹配。
(The -i选项不能正确移植;在BSD和MacOS上,您将需要-i ''。)

相关问题