linux下cat命令,关于cat >file 、cat <file <<EOF、cat <<-EOF的区别
我们经常会碰到这样一个场景:
执行脚本的时候,需要往一个文件里自动输入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 > file
和 cat < file
和cat file
命令的用法。
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.
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.txt
和 cat example.txt
命令的输出结果是相同的,但是它们的输入数据来源不同。
linux下cat命令,关于cat >file 、cat <file <<EOF、cat <<-EOF的区别相关推荐
- linux下find命令用法
一.Linux中find常见用法示例 ·find path -option [ -print ] [ -exec -ok command ] {} /; ...
- linux下sort命令使用详解---linux将文本文件内容加以排序命令
转载自:http://www.cnblogs.com/hitwtx/archive/2011/12/03/2274592.html linux下sort命令使用详解---linux将文本文件内容加以排 ...
- linux命令引用,Linux下nl命令的用法详解
Linux中nl命令和cat命令很像,不过nl命令会打上行号,属于比较不常用的命令,下面随小编一起来了解下这个鲜为人知的nl命令吧. nl命令在linux系统中用来计算文件中行号.nl 可以将输出的文 ...
- linux 命令xargs,Linux下xargs命令详解
Linux下xargs命令详解 1. 简介 之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了xargs命令,例如: find /sbin -pe ...
- linux下常用命令wget进行整站下载
一.Linux下的wget Linux系统中的wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,我们经常要下载一些软件或从远程服务器恢复备份到本地服务器.wget支持H ...
- linux 0.11 编译 msed,Linux下sed命令使用
Linux下sed命令使用 1.Sed简介: sed是一种在线流编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space) ...
- linux find ok用法,linux下find命令用法
一.Linux中find常見用法示例·find path -option [ -print ] [ -exec -ok command ] {} /; ...
- linux下tail命令的用法,tail命令_linux tail命令的用法
摘要 腾兴网为您分享:linux tail命令的用法,央视影音,天猫超市,腾讯爱玩,水印相机等软件知识,以及分身多开,爱我大兴,安卓投屏电脑软件,拓客神器,新疆社区,splitit,iphone4s短 ...
- Linux下的命令总结笔记(二)
说在前面的话: 本文是以笔记的形式呈现,那么其内容也将会有一个更新的过程.其命令也为亲测内容,大家可以放心使用(蓝色字体部分除外,蓝色部分为未测试或测试后未验证).如果有一些什么问题,可以给我留言. ...
- linux中grep的例子,Linux下grep命令使用实例
那么你知道grep命令参数.如何使用grep命令去搜索某个文件中的内容呢.grep 命令递归查找.使用grep去匹配某一个单词么?接下来是小编为大家收集的Linux下grep命令使用实例,欢迎大家阅读 ...
最新文章
- java mp3转wav_在线语音转文字网站,快收藏起来
- 3_7 MementoMode 备忘录模式
- Python3 正则相关
- 用java实现学生管理系统
- 亚麻纤维截面形态_纺织品知识点--纺织纤维的分类get
- @Scheduled定时任务
- 使用OpenCV进行图片模糊处理(中值滤波)
- Netscreen的岁月 from Sina
- 关闭windows自动更新N种方法
- centos7开启网卡命令_Centos7启动网卡并查看IP地址的方法
- 只有PHP大牛才能读懂的内涵图
- 深度学习 卷积神经网络-Pytorch手写数字识别
- 干活的干不过写PPT的 新东方年会吐槽奖金追加至12万-千氪
- 薅羊毛专业版第三十六次更新
- OCA/OCP Oracle 数据库12c考试指南读书笔记:第31章:Multitenant Container and Pluggable Database Architecture
- win10 Snipaste 截图软件
- (一)c语言百题趣味题之--分糖问题
- 休息,考完了MCSD
- HTML:图片超链接应用
- 聚合函数是否可以写在order by后面,为什么?