Sed Bash:使用^M字符串内联追加文本

Sed Bash:使用^M字符串内联追加文本,sed,carriage-return,Sed,Carriage Return,这个问题的焦点转移了一点,真正的问题在下面的编辑2中得到了解决。一开始的问题是: 我想在文件中的所有行中添加一个简单字符串,例如字母N。这必须在不引入换行符的情况下进行。我需要的是这样的: file result Aa AaN Bb BbN C CN Dd DdN AaN BbN C N DdN 到目前为止我唯一发现的是 sed -e 's/../&N/' 它仅在特定位置追加字符串,因此对于具有不同字符长度的条目,这不起作用

这个问题的焦点转移了一点,真正的问题在下面的编辑2中得到了解决。一开始的问题是:

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

file     result
Aa       AaN
Bb       BbN
C        CN
Dd       DdN
AaN
BbN
C
N
DdN
到目前为止我唯一发现的是

sed -e 's/../&N/'
它仅在特定位置追加字符串,因此对于具有不同字符长度的条目,这不起作用,因为结果如下所示:

file     result
Aa       AaN
Bb       BbN
C        CN
Dd       DdN
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 $0"N"}'  Input_file
如果您想对特定字段执行以下操作,请尝试:(例如,第一个字段应在此处附加
N
):

您所需要的只是:

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


如果不使用
-i
选项来更改文件,请在gnu上试用:

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

sed's/$/N/'file>newfile
?可能存在@And的重复,请您通过执行
cat-v Input\u file
检查您的输入文件中是否有控制M个字符,并通知我们。似乎我有。每个元素之间都有
^M
。我想这改变了情况。@而且,我知道,我更新了我的答案,请检查一下,然后让我知道?我想您不需要
\r
,所以我添加了从行中删除它们的逻辑。@而且,
\r
不会来自命令,而是来自于将文件从windows复制到unix系统时的命令,因此您可以使用
dos2unix
实用程序(生成文件后运行它以删除垃圾字符)或者像
tr-d'\rtemp\u file&&mv temp\u file Input\u file
那样使用,然后让我知道?好的,现在我可以做了。我重新生成了这个列表,并在上面使用了您的第一行代码。它仍然包含
^M
字符,如
cat-v
所示,但每个字符后面都有一个换行符。现在我有了所需的输出。谢谢你帮我收拾残局!你对如何编辑我的帖子以使其对其他人有用有什么建议吗?很好,这更简单。由于RavinderSingh13帮助我解决了我的问题,我将他的答案保留为已接受,否则我现在就接受这个答案。这也将第一个字母改为
N