我有一个逗号分隔的文件,如下所示
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 ''
。