在文件开头将 LF 替换为 CRLF

在文件开头将 LF 替换为 CRLF

我正在编写一个脚本,该脚本迭代所有文件并替换每个文件开头的换行符。对于这样的文件,

\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。

相关内容