sed - 删除行尾的句点

时间:2011-11-29 20:42:22

标签: regex sed

我正在尝试删除文本文件中行尾的句点。有些行在结尾处有句号,有些则没有:

$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)

由于

4 个答案:

答案 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)

sed's / period [。| ] * $ // g'ts.txt&gt; ts1.txt

输入文件: 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/\\.$//' 

也适用于删除最后一段时间。