这个问题的重点转移了一点,真正的问题在下面的编辑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
提出的解决方案能够解决此问题!
答案 0 :(得分:1)
如果您对awk
感到满意,则可以直接使用print代替替代。
awk '{gsub(/\r/,"");print $0"N"}' Input_file
如果要对特定字段进行恶作剧,请尝试:(以第1个字段应在此处附加N
为例)
awk '{gsub(/\r/,"");$1=$1"N"} 1' Input_file
答案 1 :(得分:1)
您需要的是:
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
答案 2 :(得分:0)
没有-i
选项来更改文件,请在gnu sed上尝试:
sed -E 's/$/N/' file