我们经常会碰到这样一个场景:

执行脚本的时候,需要往一个文件里自动输入N行内容。

如果是少数的几行内容,还可以用echo追加方式,但如果是很多行,

单纯用echo追加的方式就显得愚蠢之极。

这个时候,就可以使用EOF结合cat命令进行行内容的追加了!

cat和EOF简介

cat用于显示文本文件内容,全部输出

EOF“end of file”,表示文本结束符

结合这两个标识,即可避免使用多行echo命令的方式,并实现多行输出的结果。

如果不是在脚本中,我们可以用Ctrl-D输出EOF的标识

cat > test.txt

cat >> test.txt

111

222

333

Ctrl-D

####################################

EOF是END Of File的缩写,表示自定义终止符。

既然自定义,那么EOF就不是固定的,可以随意设置别名,在Linux按

Ctrl-D就代表EOF。

EOF一般会配合cat能够多行文本输出,通过cat配合重定向能够生成文件并追加操作。

在它之前先熟悉几个特殊符号:<     输入重定向>    输出重定向>>  输出重定向,进行追加,不会覆盖之前内容<<  标准输入来自命令行的一对分隔号的中间内容其用法如下:<....EOF            //结束还可以自定义,比如自定义:<....ABC              //结束# cat << EOF  > test.txt   # cat << EOF >> test.txt# cat >test.txt << EOF# cat >> test.txt << EOF# cat << EOF >test.txt   > Hello!   > This is a test file!   > Test for cat and EOF!   > EOF看执行结果:# cat test.txt  Hello!   This is a test file!   Test for cat and EOF! #######################################cat <

两个都是获取stdin,并在EOF处结束stdin,输出stdout。

但是 <<- 是什么意思呢?

先来看man中的说明:

If the redirection operator is <<-, then all leading tab characters are stripped from input lines and the line containing delimiter.

翻译过来的意思就是:

如果重定向的操作符是<<-,那么分界符(EOF)所在行的开头部分的制表符(Tab)都将被去除。

这可以解决由于脚本中的自然缩进产生的制表符。

通俗一点的解释:

在我们使用cat <

EOF必须顶行写,前面不能用制表符或者空格。

比如,下面的语句就不会出错:

# cat <> Hello,world!> EOFHello,world!##################如果结束分解符EOF前有制表符或者空格,则EOF不会被当做结束分界符,只会继续被当做stdin来输入。而<<-就是为了解决这一问题:# cat <<-EOF  >Hello,world!  >      EOFHello,world!##################

上面的写法,虽然最后的EOF前面有多个制表符和空格,但仍然会被当做结束分界符,表示stdin的结束。

这就是<<和<<-的区别。

综上所述:

综合来说,下面是关于cat命令中三个不同输入输出方式的说明:

cat > file:
将输入重定向到文件,并覆盖原有内容。即将用户在终端中输入的内容写入文件中,并覆盖文件中原有的内容。
**举例来说,执行命令cat > example.txt,然后输入一些文本内容并按下回车键,输入完成后使用 Ctrl+D 结束输入,此时该文本内容就被覆盖写入了example.txt文件中。

cat < file << EOF:
从文件中读取输入,并直到遇到EOF(End Of File)为止。即从指定的文件中读取内容,并将其传递给cat命令作为标准输入,直到遇到EOF时结束输入。EOF是自定义的结束标识符,可以使用任意字符或字符串代替,只需保证开始和结束时使用相同的字符或字符串即可。

**举例来说,执行命令cat << EOF,然后在终端中输入一些文本内容并按下回车键,然后输入EOF作为结束标识符,输入完成后使用 Ctrl+D结束输入,此时该文本内容就被作为标准输入传递给了cat命令。

cat <<- EOF:
从文件中读取输入,并直到遇到EOF为止。和上述方式类似,区别在于在EOF前添加了一个“-”号,表示忽略所有的前导制表符(Tab)字符。这个方式通常用于在shell脚本中输入多行文本内容。

**举例来说,执行命令cat <<- EOF,然后在终端中输入一些文本内容并按下回车键,然后输入EOF作为结束标识符,输入完成后使用 Ctrl+D结束输入,此时该文本内容就被作为标准输入传递给了cat命令,并忽略了所有的前导制表符(Tab)字符。

总之,三种方式的区别在于输入来源和方式不同,使用时需根据具体场景选择合适的方式。

其他补充:

cat > filecat < filecat file命令的用法。

  1. cat > file :将用户在终端中输入的内容覆盖写入指定的文件中。

举例说明:

假设现在需要将终端输入的内容写入到一个名为 “example.txt” 的文件中,可以使用如下命令:

cat > example.txt

执行该命令后,终端会进入一个等待输入的状态,这时可以在终端中输入任何内容,按下回车键表示输入完成。此时输入的内容会被直接覆盖写入到 “example.txt” 文件中。例如,输入:

Hello, World!
This is an example file.

按下回车键后,可以使用 Ctrl + D 组合键来结束输入。此时输入的内容就会被写入到 “example.txt” 文件中。如果想要查看写入的内容,可以使用 cat 命令来打印文件内容,例如:

cat example.txt

输出如下:

Hello, World!
This is an example file.
  1. cat < file :从指定的文件中读取内容,并将其传递给 cat 命令作为标准输入。

举例说明:

假设现在有一个名为 “example.txt” 的文件,其中包含如下内容:

Hello, World!
This is an example file.

如果想要将该文件的内容打印到终端上,可以使用如下命令:

cat < example.txt

执行该命令后,cat 命令会从 “example.txt” 文件中读取内容,并将其作为标准输入传递给 cat 命令。然后,cat 命令会将读取到的内容打印到终端上,输出如下:

Hello, World!
This is an example file.

注意:使用 < 进行输入重定向时,命令会从文件中读取内容,并将其传递给命令作为标准输入,因此命令不需要等待用户的输入,而是直接读取文件内容并进行处理。
3. cat example.txt 命令会直接打印 example.txt 文件的内容到终端上。输出如下:

Hello, World!
This is an example file.

因此,cat < example.txtcat example.txt 命令的输出结果是相同的,但是它们的输入数据来源不同。

linux下cat命令,关于cat >file 、cat <file <<EOF、cat <<-EOF的区别相关推荐

  1. linux下find命令用法

    一.Linux中find常见用法示例 ·find    path    -option    [    -print ]    [ -exec    -ok    command ]    {} /; ...

  2. linux下sort命令使用详解---linux将文本文件内容加以排序命令

    转载自:http://www.cnblogs.com/hitwtx/archive/2011/12/03/2274592.html linux下sort命令使用详解---linux将文本文件内容加以排 ...

  3. linux命令引用,Linux下nl命令的用法详解

    Linux中nl命令和cat命令很像,不过nl命令会打上行号,属于比较不常用的命令,下面随小编一起来了解下这个鲜为人知的nl命令吧. nl命令在linux系统中用来计算文件中行号.nl 可以将输出的文 ...

  4. linux 命令xargs,Linux下xargs命令详解

    Linux下xargs命令详解 1. 简介   之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了xargs命令,例如: find /sbin -pe ...

  5. linux下常用命令wget进行整站下载

    一.Linux下的wget Linux系统中的wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,我们经常要下载一些软件或从远程服务器恢复备份到本地服务器.wget支持H ...

  6. linux 0.11 编译 msed,Linux下sed命令使用

    Linux下sed命令使用 1.Sed简介: sed是一种在线流编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space) ...

  7. linux find ok用法,linux下find命令用法

    一.Linux中find常見用法示例·find    path    -option    [    -print ]    [ -exec    -ok    command ]    {} /; ...

  8. linux下tail命令的用法,tail命令_linux tail命令的用法

    摘要 腾兴网为您分享:linux tail命令的用法,央视影音,天猫超市,腾讯爱玩,水印相机等软件知识,以及分身多开,爱我大兴,安卓投屏电脑软件,拓客神器,新疆社区,splitit,iphone4s短 ...

  9. Linux下的命令总结笔记(二)

    说在前面的话: 本文是以笔记的形式呈现,那么其内容也将会有一个更新的过程.其命令也为亲测内容,大家可以放心使用(蓝色字体部分除外,蓝色部分为未测试或测试后未验证).如果有一些什么问题,可以给我留言. ...

  10. linux中grep的例子,Linux下grep命令使用实例

    那么你知道grep命令参数.如何使用grep命令去搜索某个文件中的内容呢.grep 命令递归查找.使用grep去匹配某一个单词么?接下来是小编为大家收集的Linux下grep命令使用实例,欢迎大家阅读 ...

最新文章

  1. java mp3转wav_在线语音转文字网站,快收藏起来
  2. 3_7 MementoMode 备忘录模式
  3. Python3 正则相关
  4. 用java实现学生管理系统
  5. 亚麻纤维截面形态_纺织品知识点--纺织纤维的分类get
  6. @Scheduled定时任务
  7. 使用OpenCV进行图片模糊处理(中值滤波)
  8. Netscreen的岁月 from Sina
  9. 关闭windows自动更新N种方法
  10. centos7开启网卡命令_Centos7启动网卡并查看IP地址的方法
  11. 只有PHP大牛才能读懂的内涵图
  12. 深度学习 卷积神经网络-Pytorch手写数字识别
  13. 干活的干不过写PPT的 新东方年会吐槽奖金追加至12万-千氪
  14. 薅羊毛专业版第三十六次更新
  15. OCA/OCP Oracle 数据库12c考试指南读书笔记:第31章:Multitenant Container and Pluggable Database Architecture
  16. win10 Snipaste 截图软件
  17. (一)c语言百题趣味题之--分糖问题
  18. 休息,考完了MCSD
  19. HTML:图片超链接应用
  20. 聚合函数是否可以写在order by后面,为什么?

热门文章

  1. Unity2019中的android动态申请权限(Permissions)
  2. element中设置5栏布局
  3. VirtualLab Fusion:基于微软专利的蝴蝶型出瞳扩展光导
  4. SMS格式编码与解码
  5. 结构方程模型(SEM)定义及应用【免费教程】
  6. 美团后端面试大全【附答案】
  7. cassandra 概述
  8. 大数据技术之Flume(一)Flume概述、Flume快速入门
  9. 显卡报价,一夜闪崩 35%
  10. 18北大考研经验贴汇总