Bash:附加文本与 ^M 污染的字符串

Bash: Append text in-line with ^M-polluted strings

这个问题的重点有点转移,真正的问题在下面的编辑 2 中解决。开头的问题:

我想在文件的所有行中附加一个简单的字符串,例如字母 N。这必须在不引入换行符的情况下发生。我需要的是这样的:

file     result
Aa       AaN
Bb       BbN
C        CN
Dd       DdN

目前我唯一找到的是

sed -e 's/../&N/'

它仅在特定位置附加字符串,因此对于具有不同字符长度的条目,这不起作用,因为结果如下所示:

AaN
BbN
C
N
DdN

最简单的类比是

sed -e 's/^/&N/' file

每行前置。所以我需要 ^ 的反向参数,它允许我追加到每一行,无论字符串在该行中有多长。我发现的关于追加的其他问题介绍了其他几个不适用于此处的限制。


编辑: 建议

sed 's/$/N/' file > file2

仅更改我文件中的 最后一行 ,而我需要更改每一行。它似乎在链接的问题中起作用,但在这里不起作用。不知道为什么。


编辑 2:

正如 RavinderSingh13 所指出的,我通过其他一些命令获得的列表包含 ^M 个字符。所以通过使用

cat -v file

真实内容揭晓:

Aa^M
Bb^M
C^M
Dd^M

所提供的解决方案能够解决此问题!

如果您同意 awk,您也可以简单地使用打印而不是替换。

awk '{gsub(/\r/,"");print [=10=]"N"}'  Input_file

如果你想为特定的领域做恶习,那么试试:(以第一个领域应该在此处附加 N 为例):

awk '{gsub(/\r/,"");="N"} 1'  Input_file

您只需要:

sed 's/\r*$/N/'

看:

$ cat -v file
Aa^M
Bb^M
C^M
Dd^M

$ sed 's/\r*$/N/' file | cat -v
AaN
BbN
CN
DdN

没有 -i 更改文件的选项,在 gnu sed 上试过:

sed -E 's/$/N/' file