这个问题的重点转移了一点,真正的问题在下面的编辑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
没问题,你可以简单地使用print而不是替换。
awk '{gsub(/\r/,"");print $0"N"}' Input_file
如果你想为特定的领域副做,那么尝试:(举例说明第一个字段应该附加N
这里):
awk '{gsub(/\r/,"");$1=$1"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