Linux下如何移除.dat文件每行末尾的竖线(|)
移除.dat文件每行末尾竖线的实用方法
嘿,我来帮你搞定这个问题!先看看你的场景:你有个.dat文件,内容大概是这样的:
1|sam |test|
2|eric |test|
3|james|test|
你之前尝试了sed 's/.$//' file > file.nolast这个命令,其实思路是对的,但可以更精准,避免误删其他字符。下面给你几个靠谱的解决方案:
1. 精准匹配行尾竖线(最推荐)
这个命令专门瞄准每行末尾的|进行删除,不会碰其他字符:
sed 's/|$//' yourfile.dat > yourfile.nolast.dat
为啥这个更好?解释下:
s/|$//里的$是行尾锚点,意思是只匹配行最后一位的竖线,把它替换成空(也就是删掉)。- 对比你之前的
.$,它是删除每行最后一个字符,万一某行末尾不是竖线(比如有换行符或者其他意外字符),就会误删,这个方法就不会有这个问题。
2. 处理带末尾空格的情况
如果你的文件里有些行末尾是「空格+竖线」(比如1|sam |test |),可以用这个命令一次性干掉空格和竖线:
sed 's/ *|$//' yourfile.dat > yourfile.nolast.dat
这里的 *表示匹配0个或多个空格,再配合行尾的竖线,一次性清理干净。
3. 直接原地修改原文件
要是你不想生成新文件,想直接修改原文件,可以用sed的-i参数(注意不同系统用法略有区别):
- Linux系统直接用:
sed -i 's/|$//' yourfile.dat
- macOS系统需要加个空字符串参数:
sed -i '' 's/|$//' yourfile.dat
⚠️ 小提醒:原地修改前最好先备份原文件,以防操作失误丢数据!
其实你之前的命令如果每行最后确实都是|的话也能生效,但精准匹配行尾竖线的方式更稳妥,适配更多可能的情况~
内容的提问来源于stack exchange,提问作者zyzzino
相关产品推荐
相关产品推荐

