当前位置: 首页 > news >正文

Linux cat命令实现文本写入文件的完整指南

cat(concatenate 的缩写)是 Unix/Linux 系统中最常用的命令之一,主要用于查看文件内容、创建文件、合并文件等操作。在文章开头提到的命令cat > shua.py << 'EOF'中,cat被用来创建一个名为shua.py的文件,并写入三行内容(11111111、22222222、33333333)。

这个命令实际上包含了两个关键部分:输出重定向(>)和 Here Document(<< 'EOF')。输出重定向将cat命令的输出(默认是标准输出 stdout)重定向到shua.py文件,而 Here Document 则提供了一种在命令行直接输入多行文本的方式。

1

2

3

4

5

cat> shua.py <<'EOF'

11111111

22222222

33333333

EOF

1.1 cat 命令的基本用法

cat命令最基本的用法是显示文件内容:

1

catfilename

它还可以同时显示多个文件:

1

catfile1 file2

或者将多个文件合并为一个新文件:

1

catfile1 file2 > combined_file

1.2 创建文件的多种方式

在 Linux 中,创建文件有多种方法,cat只是其中之一。其他常见方法包括:

使用touch命令创建空文件:

1

touchnewfile.txt

使用文本编辑器如vi、nano等:

1

vinewfile.txt

使用重定向符号:

1

> newfile.txt

每种方法各有适用场景,而cat结合 Here Document 的方式特别适合在脚本中预置文件内容或在命令行快速创建包含多行文本的文件。

二、深入 Here Document:多行输入的优雅解决方案

Here Document(常简称为 heredoc)是 shell 脚本中一种特殊的重定向方式,它允许用户在命令行或脚本中直接嵌入多行文本输入,直到遇到指定的结束标记为止。

2.1 Here Document 的基本语法

基本语法格式为:

1

2

3

command<< delimiter

text content

delimiter

在我们的例子中,EOF(End Of File 的缩写)被用作 delimiter(分隔符),但实际可以使用任何字符串作为分隔符,只要开始和结束的分隔符一致即可。

2.2 Here Document 的引号意义

值得注意的是,在我们的例子中,分隔符EOF被单引号包围(<< 'EOF'),这与不加引号或使用双引号有重要区别:

1.不加引号:变量和命令替换会被展开

cat << EOF
当前目录是:$PWD
EOF

2.加双引号:与不加引号效果相同

cat << "EOF"
当前目录是:$PWD
EOF

3.加单引号:变量和命令替换不会被展开,内容会原样输出

cat << 'EOF'
当前目录是:$PWD
EOF

这种差异在编写脚本时尤为重要,开发者需要根据是否需要变量展开来选择合适的引用方式。

2.3 Here Document 的高级用法

Here Document 还有一些高级用法值得了解:

1.缩进处理:在脚本中为了美观常常需要缩进,可以使用<<-忽略前导制表符(但不包括空格):

1

2

3

cat<<- EOF

This line will have tabs removed

EOF

2.向交互式命令传递输入:可以自动化需要用户输入的命令:

1

2

3

4

5

6

ftp-n << EOF

openftp.example.com

user username password

put localfile remotefile

quit

EOF

3.多行注释:虽然不推荐,但 Here Document 可以用来实现多行注释:

1

2

3

4

: <<'COMMENT'

This is a multi-line comment

It won't be executed

COMMENT

三、输出重定向:理解 Linux 的 I/O 模型

在cat > shua.py这部分命令中,>符号表示输出重定向,这是 Linux/Unix 系统强大功能的基础之一。

3.1 Linux 的文件描述符

Linux 系统中有三个标准的文件描述符:

  • 标准输入(stdin):文件描述符 0,通常是键盘输入
  • 标准输出(stdout):文件描述符 1,通常是终端显示
  • 标准错误(stderr):文件描述符 2,通常是错误信息输出

3.2 重定向操作符

常用的重定向操作符包括:

  • >:将标准输出重定向到文件(覆盖)
  • >>:将标准输出重定向到文件(追加)
  • 2>:将标准错误重定向到文件
  • &>:将标准输出和标准错误都重定向到文件
  • <:将文件内容重定向为标准输入

3.3 重定向的高级用法

重定向到多个地方:使用tee命令可以同时输出到文件和屏幕:

1

catfile|teenewfile

重定向顺序的重要性:2>&1和>&的区别:

1

2

3

4

5

# 正确方式:先重定向stdout,再重定向stderr

command>file2>&1

# 错误方式:顺序反了达不到效果

command2>&1 >file

重定向到进程替换:可以将输出作为另一个命令的输入文件:

1

diff<(command1) <(command2)

四、实际应用场景与最佳实践

了解了cat、Here Document 和重定向的基本原理后,让我们看看它们在现实世界中的应用场景和最佳实践。

4.1 自动化脚本中的配置文件生成

在部署脚本中,经常需要根据模板生成配置文件。使用 Here Document 可以优雅地实现这一功能:

1

2

3

4

5

6

7

8

9

10

11

cat>/etc/nginx/conf.d/myapp.conf <<'EOF'

server {

listen 80;

server_name myapp.example.com;

location / {

proxy_pass http://localhost:3000;

proxy_set_header Host $host;

}

}

EOF

4.2 快速创建测试文件

开发过程中经常需要创建测试文件,cat和 Here Document 的组合非常方便:

1

2

3

4

5

cat> test_input.txt << EOF

line1

line2

line3

EOF

4.3 安全注意事项

变量展开:如前所述,如果不希望变量被展开,应该使用单引号包围分隔符

权限问题:确保目标文件所在目录有写入权限

覆盖风险:>操作符会覆盖已有文件,必要时可以使用set -o noclobber防止意外覆盖

4.4 性能考量

对于大文件操作,cat可能不是最高效的选择。替代方案包括:

使用dd命令进行二进制文件操作

对于大文本文件处理,考虑使用sed或awk

文件复制使用cp命令更直接

五、扩展知识:相关命令与替代方案

虽然cat非常实用,但 Linux 提供了丰富的文本处理工具集,了解这些工具可以让我们更高效地处理文本。

5.1 文本处理三剑客

grep:文本搜索工具

sed:流编辑器,适合文本替换

awk:强大的文本分析工具

5.2 其他有用的文本命令

less/more:分页查看文件内容

head/tail:查看文件开头/结尾部分

cut:按列提取文本

paste:合并文件行

sort:排序文本行

uniq:报告或忽略重复行

wc:统计行数、单词数、字符数

5.3 现代替代工具

近年来,一些更现代的工具提供了更好的性能和功能:

  • ripgrep (rg):更快的 grep 替代品
  • fd:用户友好的 find 替代品
  • bat:带有语法高亮的 cat 替代品
  • jq:JSON 处理工具

六、从哲学角度看 Linux 文本处理

Linux 的设计哲学深深影响了其文本处理工具的设计和使用方式。理解这些哲学思想有助于我们更好地使用这些工具。

http://www.jsqmd.com/news/585194/

相关文章:

  • Gazebo仿真避坑指南:ROS小车+机械臂+YOLO自动控制全流程配置
  • 2026年热门的河南机器人外呼系统/电话外呼系统/机器人外呼系统/外呼系统开发精选推荐公司 - 行业平台推荐
  • Xilinx Video IP中的时序生成与检测:从基础到高级配置全解析
  • LoRA训练助手效果展示:GPT模型微调前后对比
  • 2026年4月京东云1分钟保姆级部署OpenClaw及大模型百炼APIKey指南
  • 从灰度世界到边缘检测:4种AWB算法MATLAB实现对比(附完整代码)
  • 【C#实战】WinForm窗体事件全解析与应用场景
  • 主流AI培训机构评测:关键指标全对比
  • 2026聚焦安徽!评价好的重点中专推荐及推荐揭秘,重点中专/中等职业教育学校,重点中专直销厂家有哪些 - 品牌推荐师
  • 告别手动打字!深求·墨鉴极简文档解析,3步搞定图片转Markdown
  • OpenClaw性能调优:千问3.5-9B响应速度提升30%方案
  • CSS3毛玻璃效果实战:backdrop-filter与filter的兼容性解决方案
  • Cogito-v1-preview-llama-3B效果实测:看3B小模型如何智能解答多语言问题
  • 别再只盯着IOU了!手把手拆解DeepSort级联匹配,看它如何用‘优先级’解决ID跳变
  • Qwen3.5-9B-AWQ-4bit效果实测:不同光照/角度图片的主体识别准确率展示
  • 1990-2025年企业基金退出事件数据
  • OSG+OSGEarth+OSGQt编译懒人包:一键部署与测试教程(附百度云链接)
  • 面向 LLM 的程序设计 3:LLM-Friendly 的响应结构:扁平键、稳定字段与类型标注
  • SAP物料管理避坑指南:删除标记函数这些细节要注意
  • 2026年4月华为云10分钟超简单安装OpenClaw及大模型百炼APIKey流程
  • Linux文件名修改方法大全
  • Qwen3.5-9B新手入门:图文识别+代码生成,一个镜像搞定AI应用
  • 用FreeCAD模拟机械运动:以旋转把手为例,快速检查零件干涉与间隙
  • 从OpenPose到HRNet:2D姿态估计实战选型指南(附COCO数据集性能对比)
  • SpringBoot3项目里,MyBatis-Flex的APT怎么做到零配置自动生成Mapper?
  • 告别单位换算!Allegro中同时显示mil和mm的3种方法横向评测
  • tao-8k效果实测:8192长度文本嵌入向量生成惊艳效果展示
  • Pixel Dream Workshop 面试宝典:常见Java面试题在AI项目中的实践
  • 千问3.5-2B快速部署:7860端口默认开放,无需额外nginx反代即可对外提供服务
  • STM32F4 FSMC驱动TFT LCD详解:从正点原子例程到CubeMX配置的迁移心法