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
这个问题的重点有点转移,真正的问题在下面的编辑 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