从 unix 中的文件中删除最后一个字符

Remove last character from a file in unix

08-01-12|07-30-13|08-09-32|12-43-56|

想要

08-01-12|07-30-13|08-09-32|12-43-56

我只想删除最后一个 |

快速而肮脏

sed 's/.$//' YourFile

有点安全

sed 's/[|]$//' YourFile

允许space

sed 's/[|][[:space:]]*$//' YourFile

仅最后一行的最后一个字符相同(感谢@amelie 的评论): 在前面添加一个 $ 所以快速而肮脏它给出 sed '$ s/.$//' YourFile

由于您用 awk 标记,在这里找到两种方法,一种用于对您的问题的每种解释:

  • 如果要删除|如果是最后一个字符:

    awk '{sub(/\|$/,"")}1' file
    

等同于sed s'/|$//' file,只是转义|因为它在正则表达式内容中有特殊含义("or")。

  • 如果要删除最后一个字符,不管它是什么:

    awk '{sub(/.$/,"")}1' file
    

等同于sed s'/.$//' file,因为.匹配任何字符。

测试

$ cat a
08-01-12|07-30-13|08-09-32|12-43-56|
rrr.
$ awk '{sub(/\|$/,"")}1' a
08-01-12|07-30-13|08-09-32|12-43-56
rrr.                                 # . is kept
$ awk '{sub(/.$/,"")}1' a
08-01-12|07-30-13|08-09-32|12-43-56
rrr                                  # . is also removed