是否在Windows上用sed附加到每行的末尾?

是否在Windows上用sed附加到每行的末尾?,windows,unix,sed,Windows,Unix,Sed,我正在Windows(GNU端口)上使用sed 我执行: $> sed "s/$/./" < /data.txt 但是期待 one. two. three. 下面的方法很有效,但我认为不应该。我读它的方式是“用句号替换行的最后一个字符”。我担心它在其他地方使用时不会一直起作用。其目的不是用句点替换最后一个字符,而是附加句点 $> sed "s/.$/./" < /data.txt $>sed“s/$/./”

我正在Windows(GNU端口)上使用
sed

我执行:

$> sed "s/$/./" < /data.txt
但是期待

one.
two.
three.
下面的方法很有效,但我认为不应该。我读它的方式是“用句号替换行的最后一个字符”。我担心它在其他地方使用时不会一直起作用。其目的不是用句点替换最后一个字符,而是附加句点

$> sed "s/.$/./" < /data.txt
$>sed“s/$/./”

我不确定是文件编码或windows特有的东西导致了我的问题,还是因为缺乏使用
sed
的经验。想法?

hextump-C
透露了一些信息:

$ sed 's/$/./' < t.dos | hexdump -C
00000000  6f 6e 65 0d 2e 0a 74 77  6f 0d 2e 0a 74 68 72 65  |one...two...thre|
00000010  65 0d 2e 0a                                       |e...|
00000014
上面的方法不太好,因为只有当输入是dos格式时,它才会工作,否则会破坏文件。更好的解决方案可能是首先剥离任何
\r
,然后手动将其添加回,如下所示:

$ tr -d '\r' < t.dos | sed -e 's/$/.\r/' | hexdump -C
00000000  6f 6e 65 2e 0d 0a 74 77  6f 2e 0d 0a 74 68 72 65  |one...two...thre|
00000010  65 2e 0d 0a                                       |e...|
00000014
$tr-d'\r'
尝试
sed-n“l;s/$/./;l”
以sed在替换命令前后看到的方式查看数据。我发现,通过将
--text
选项添加到
sed
中,我可以得到我想要的结果,但我不知道
hextdump
,我可以看出这是多么有用。谢谢
$ sed 's/.$/.\r/' < t.dos | hexdump -C
00000000  6f 6e 65 2e 0d 0a 74 77  6f 2e 0d 0a 74 68 72 65  |one...two...thre|
00000010  65 2e 0d 0a                                       |e...|
00000014
$ tr -d '\r' < t.dos | sed -e 's/$/.\r/' | hexdump -C
00000000  6f 6e 65 2e 0d 0a 74 77  6f 2e 0d 0a 74 68 72 65  |one...two...thre|
00000010  65 2e 0d 0a                                       |e...|
00000014