我有一个文件,里面有许多不可见的换行符。在 Vim 中,它显示为$
(可以使用 来查看:set list
)。我很难将它们转换为输出,该输出表示为一行字符串,其中包含文字\n
字符串,而不是无敌的$
。
例子:
# cat file.txt
test
file
with
newlines
要在 vim 中查看换行符,请输入 :set list。
使用此命令,我可以根据需要格式化输出:
# awk '{printf "%s\\n", $0}' file.txt
test\nfile\nwith\nnewlines\n
但是,我认为应该有一种更简单的方法sed
,echo
或者printf
答案1
sed
使用GNU版本的答案:
sed -z 's/\n/\\n/g' file.txt
使用z
选项sed
可以避免用换行符分割文件内容。
回答使用echo
:
xargs -I {} echo -n '{}\n' < file.txt
通过xargs
,输出为每个文件行echo
添加。\n
答案2
怎么样:
awk -v ORS='\\n' 1 infile
或者更紧凑一点:
awk 1 ORS='\\n' infile
答案3
使用标准sed
:
H
1h
$ {
g
s/\n/\\n/g
s/$/\\n/
}
$! d
也就是说,将当前行追加到保留空间(如果是第一行,则覆盖保留空间)。如果我们在最后一行,则使用 获取保留空间g
,然后将每个文字换行符替换为并在最后\n
插入,然后通过到达脚本末尾隐式打印缓冲区。\n
如果我们不在最后一行,则跳到下一个循环,而不隐式打印当前缓冲区。
在命令行上:
sed -e H -e 1h -e '${ g; s/\n/\\n/g; s/$/\\n/; }' -e '$!d' file
这将输出输入的所有行,并以两个字符\n
作为分隔符连接在一起。输出末尾将有一个换行符。
答案4
perl
:
perl -00pe 's/\n/\\n/g' file
如果你想直观地看到LF
最后的角色。
\n
否则,如果您想在不看到控制台上的输出(字符)的情况下切断它,请使用简单的transliteration
:
cat file | tr '\n' '\\'