我正在编写一个脚本,该脚本迭代所有文件并替换每个文件开头的换行符。对于这样的文件,
\n
\n
A line \r\n
Another line \r\n
\r
\f
\n
\n
Few more lines \r\n
\r\n
我需要用 CRLF 替换文件开头的所有换行符,即
\r\n
\r\n
A line \r\n
Another line \r\n
\r
\f
\n
\n
Few more lines \r\n
\r\n
我尝试使用,
sed -i 's/^[\n]/\r\n/' file.txt
但这似乎不起作用。
编辑:我可以用以下内容替换一系列行:
sed '1,2s/^/\r/'
但是有没有办法判断文件中的第一个字符是否是换行符呢?
答案1
如果您有 GNU sed,那么您可以使用特殊地址形式0,/./
仅在文件的第一个非空行之前的部分进行替换。为了显示:
~$ cat -e file.txt
$
$
non empty line$
non empty line$
$
$
non-empty line$
$
($
符号表示文字行结尾:请参阅man cat
);然后
~$ sed '0,/./ s/^$/\r/' file.txt | cat -e
^M$
^M$
non empty line$
non empty line$
$
$
non-empty line$
$
其中^M
字符表示插入的 CR。