我正在尝试删除文本文件中行尾的句点。有些行在结尾处有句号,有些则没有:
$cat textfile
sometexthere.123..22.no_period
moretext_with_period. **<-- remove this period**
no_period_here_either
period. **<-- remove this period**
我试过这个,但它似乎不起作用:
sed 's/\.$//g' textfile > textfile2
(GNU sed版本4.2.1)
由于
答案 0 :(得分:7)
这是一个黑暗中的镜头,但在我尝试将Windows文件与Linux文件混合之前,我遇到了这个问题。 Windows在每个换行符上添加了额外\r
(除了标准\n
之外)您是否尝试过使用dos2unix?
[user@localhost ~]$ cat testfile
abc
def.
[user@localhost ~]$ sed 's/\.$//g' testfile
abc
def.
[user@localhost ~]$ dos2unix testfile
dos2unix: converting file testfile to UNIX format ...
[user@localhost ~]$ sed 's/\.$//g' testfile
abc
def
[user@localhost ~]$
示例 -
[user@localhost ~]$ cat temp.txt
this is a text created on windows
I will send this to unix
and do cat command.
[user@localhost ~]$ cat -v temp.txt
this is a text created on windows^M
I will send this to unix^M
and do cat command.
答案 1 :(得分:3)
如果您需要一个sed
命令来执行此操作,而不使用dos2unix
来更改原始文件,您可以执行以下操作(可能需要GNU sed)
sed -E 's/\.(^M?)/\1/' testfile
在命令行中键入^M
为 Ctrl + V 后跟 Ctrl + M
这将删除&#39;。&#39;,可选地后跟Carriage-return字符,并替换原始CR中存在的CR。
答案 2 :(得分:1)
输入文件:
sometexthere.123..22.no_period
moretext_with_period。
no_period_here_either
期。
输出文件: sometexthere.123..22.no_ moretext_with_ no_period_here_either
答案 3 :(得分:0)
sed -r 's/\\.$//'
也适用于删除最后一段时间。