我有一个逗号分隔的文件
info,someinfo,moreinfo,123,
我想去掉每行最后一个逗号。我已经尝试了许多变体:
sed -i 's/.$//' filename
上述命令似乎是互联网上的流行意见,但它并没有以任何方式改变我的文件。
6ss1mwsb1#
如果每一行包含,作为最后一个字母,您可以像这样删除
,
str="info,someinfo,moreinfo,123," echo ${str::-1}
info,someinfo,moreinfo,123
希望这对你有帮助
gudnpqoy2#
最后一个逗号后面可能有尾随空格。您可以使用以下命令,以便它能够很好地处理可选空格:
sed -i -E 's/,[[:space:]]*$//' file
我不确定你的意图是否是删除最后一个字符,不管它是否是逗号。
txu3uszq3#
如果是DOS \r\n行终止文件,请同时删除\r:
\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。它将在输出中被删除:
RS
$ awk 'BEGIN{RS="\r?\n"}{sub(/.$/,"")}1' file info,someinfo,moreinfo,123
如果您使用的是GNU awk,您可以将\r(有条件地)添加到输出中,并在print之前添加ORS=RT;,即:
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
mrwjdhj34#
你能试试这个吗:sed 's/\(.\)$//' file_name > filename_output只是将输出重定向到一个新文件filename_output。
sed 's/\(.\)$//' file_name > filename_output
filename_output
5q4ezhmt5#
该命令将删除最后一个字符,而不管它是什么。如果只想删除最后一个逗号字符,请尝试
sed -i 's/,$//' filename
这将使其他行保持原样,因为正则表达式不匹配。(The -i选项不能正确移植;在BSD和MacOS上,您将需要-i ''。)
-i
-i ''
5条答案
按热度按时间6ss1mwsb1#
如果每一行包含
,
作为最后一个字母,您可以像这样删除希望这对你有帮助
gudnpqoy2#
最后一个逗号后面可能有尾随空格。您可以使用以下命令,以便它能够很好地处理可选空格:
我不确定你的意图是否是删除最后一个字符,不管它是否是逗号。
txu3uszq3#
如果是DOS
\r\n
行终止文件,请同时删除\r
:在awk中,重新定义记录分隔符
RS
以有条件地接受\r
。它将在输出中被删除:如果您使用的是GNU awk,您可以将
\r
(有条件地)添加到输出中,并在print
之前添加ORS=RT;
,即:mrwjdhj34#
你能试试这个吗:
sed 's/\(.\)$//' file_name > filename_output
只是将输出重定向到一个新文件
filename_output
。5q4ezhmt5#
该命令将删除最后一个字符,而不管它是什么。如果只想删除最后一个逗号字符,请尝试
这将使其他行保持原样,因为正则表达式不匹配。
(The
-i
选项不能正确移植;在BSD和MacOS上,您将需要-i ''
。)