Linux 换行符的使用详解

简介

Linux 中的换行符对于格式化文本输出、修改文件和确保跨系统兼容性至关重要。

Linux 主要使用 LF(换行符,\n)来换行,而 Windows 使用 CRLF(回车符 + 换行符,\r\n

检测文件中的换行符

使用 cat -A 查看换行符

shell 复制代码
cat -A myfile.txt

输出 Linux 风格,LF \n

shell 复制代码
Hello World$

输出 Windows 风格,CRLF \r\n:

shell 复制代码
Hello World^M$
  • $:表示行的结束 (LF)

  • ^M$:表示文件有 Windows 换行符 (\r\n)

使用 od -c 检查字符

shell 复制代码
od -c myfile.txt

输出:Linux \n

shell 复制代码
0000000   H   e   l   l   o       W   o   r   l   d  \n

输出:Windows \r\n

shell 复制代码
0000000   H   e   l   l   o       W   o   r   l   d  \r  \n
  • \r \nWindows 样式的行尾

  • \nLinux 风格的行尾

换行符格式转换

将 Windows CRLF (\r\n) 转换为 Linux LF (\n)

  • 使用 dos2unix
shell 复制代码
dos2unix myfile.txt
  • 使用 sed
shell 复制代码
sed -i 's/\r$//' myfile.txt
  • 使用 tr
shell 复制代码
cat myfile.txt | tr -d '\r' > newfile_unix.txt

将 Linux LF (\n) 转换为 Windows CRLF (\r\n)

  • unix2dos
shell 复制代码
unix2dos myfile.txt
  • 使用 sed
shell 复制代码
sed -i 's/$/\r/' myfile.txt
  • 使用 awk
shell 复制代码
awk '{print $0 "\r"}' myfile.txt > newfile_windows.txt

在输出中添加换行符

打印多行文本

  • 使用 echo -e
shell 复制代码
echo -e "Line 1\nLine 2\nLine 3"

输出:

shell 复制代码
Line 1
Line 2
Line 3
  • 使用 printf
shell 复制代码
printf "Line 1\nLine 2\n"

在命令中插入换行符

使用 sed

shell 复制代码
echo "Hello World" | sed 's/ / \n/g'

输出:

shell 复制代码
Hello
World
  • 使用 awk
shell 复制代码
echo "Hello World" | awk '{print $1 "\n" $2}'

处理 Shell 脚本中的换行符

循环遍历文件中的行

shell 复制代码
#!/bin/bash
while IFS= read -r line; do
    echo "Processing: $line"
done < myfile.txt

从文件中删除空行

shell 复制代码
sed -i '/^$/d' myfile.txt

或

awk 'NF' myfile.txt > clean_file.txt

计算文件中的换行符

shell 复制代码
grep -c '^' myfile.txt

或

wc -l myfile.txt

其他用法

用新行追加文本

shell 复制代码
echo "New Entry" >> myfile.txt

追加到文本不添加新行

shell 复制代码
echo -n "New Entry" >> myfile.txt

检查文件是否以新行结尾

shell 复制代码
tail -c1 myfile.txt | od -c
  • 如果输出显示 \n,则表示文件尾部有换行符。

  • 如果没有输出,则文件缺少尾随换行符。

使用多行字符串

将多行字符串分配给变量

shell 复制代码
mytext="Line 1
Line 2
Line 3"

echo "$mytext"

使用 cat 读取多行输入

shell 复制代码
cat <<EOF > myfile.txt
This is line 1.
This is line 2.
EOF

在 Linux 中处理 Windows 格式的文件

修复文件中的 ^M 字符

  • 使用 sed
shell 复制代码
sed -i 's/\r$//' myfile.txt
  • 使用 vim
shell 复制代码
vim myfile.txt

:set fileformat=unix
:wq
相关推荐
君之嘞5 小时前
【操作系统基础】认识操作系统:系统调用
linux·运维·microsoft
渡我白衣5 小时前
访问文件后出现的 ~$ 文件是什么?它和缓冲机制、数据丢失有什么关系?
linux
爱倒腾的老唐6 小时前
07、Linux 文件管理
linux·运维·服务器
Raymond运维7 小时前
MySQL包安装 -- RHEL系列(离线RPM包安装MySQL)
linux·运维·数据库·mysql
-dcr7 小时前
24.grep 使用手册
linux·运维开发·grep
心灵宝贝7 小时前
libopenssl1_0_0-1.0.2p-3.49.1.x86_64安装教程(RPM包手动安装步骤+依赖解决附安装包下载)
linux·运维·服务器
tryCbest7 小时前
Windows和Linux设置Https(SSL)访问
linux·windows·https
btyzadt7 小时前
Ubuntu中安装Nuclei教程
linux·运维·ubuntu
倔强的石头1068 小时前
【Linux指南】gdb进阶技巧:断点高级玩法与变量跟踪实战
linux·运维
山,离天三尺三8 小时前
基于LINUX平台使用C语言实现MQTT协议连接华为云平台(IOT)(网络编程)
linux·c语言·开发语言·网络·物联网·算法·华为云