📄 s1-navigating-usingcat.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><HTML><HEAD><TITLE>使用 cat 来操作文件</TITLE><METANAME="GENERATOR"CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+"><LINKREL="HOME"TITLE="Red Hat Linux 9"HREF="index.html"><LINKREL="UP"TITLE="Shell 提示基本知识"HREF="ch-basics.html"><LINKREL="PREVIOUS"TITLE="清除和重设终端"HREF="s1-navigating-washing.html"><LINKREL="NEXT"TITLE="管道和分页器"HREF="s1-navigating-pipes.html"><LINKREL="STYLESHEET"TYPE="text/css"HREF="rhdocs-man.css"><METAHTTP-EQUIV="Content-Type"CONTENT="text/html; charset=gb2312"></HEAD><BODYCLASS="SECT1"BGCOLOR="#FFFFFF"TEXT="#000000"LINK="#0000FF"VLINK="#840084"ALINK="#0000FF"><DIVCLASS="NAVHEADER"><TABLESUMMARY="Header navigation table"WIDTH="100%"BORDER="0"CELLPADDING="0"CELLSPACING="0"><TR><THCOLSPAN="3"ALIGN="center">Red Hat Linux 9: Red Hat Linux 入门指南</TH></TR><TR><TDWIDTH="10%"ALIGN="left"VALIGN="bottom"><AHREF="s1-navigating-washing.html"ACCESSKEY="P">后退</A></TD><TDWIDTH="80%"ALIGN="center"VALIGN="bottom">13. Shell 提示基本知识</TD><TDWIDTH="10%"ALIGN="right"VALIGN="bottom"><AHREF="s1-navigating-pipes.html"ACCESSKEY="N">前进</A></TD></TR></TABLE><HRALIGN="LEFT"WIDTH="100%"></DIV><DIVCLASS="SECT1"><H1CLASS="SECT1"><ANAME="S1-NAVIGATING-USINGCAT"></A>13.9. 使用 <TTCLASS="COMMAND">cat</TT> 来操作文件</H1><P>Red Hat Linux 有一个工具程序,它能够帮助你保留简短列表,将这些列表收集起来,甚至向你透漏一点你的系统信息。 </P><P>这个工具叫做 <TTCLASS="COMMAND">cat</TT>,它是 <ICLASS="WORDASWORD">concatenate(连锁)</I> 的简写,意思是合并文件。 </P><P><TTCLASS="COMMAND">cat</TT> 命令还会在屏幕上显示整个文件的内容(譬如,键入 <TTCLASS="COMMAND">cat filename.txt</TT>)。如果文件较长,它会在屏幕上飞快地滚过。要防止这一效果的发生,使用 <TTCLASS="COMMAND">cat filename.txt | less</TT> 命令。</P><P>一起使用管道(|)和 <TTCLASS="COMMAND">less</TT> 命令会一页一页地显示文件。然后,你便可以使用向上或向下的箭头键在页码中向前或向后移动。关于使用管道来合并两个不同功能的详细信息,请参阅<AHREF="s1-navigating-pipes.html">第 13.10 节</A>。 </P><DIVCLASS="SECT2"><H2CLASS="SECT2"><ANAME="S2-NAVIGATING-REDIRECTION"></A>13.9.1. 使用重导向</H2><P>重导向就是使 shell 改变它所认定的标准输出,或者改变标准输出的目标。 </P><P>要重导向标准输出,使用 > 符号。把 > 符号放在 <TTCLASS="COMMAND">cat</TT> 命令之后(或在任何写入标准输出的工具程序和应用程序之后),会把它的输出重导向到跟在符号之后的文件中。 </P><P>譬如,使用 <TTCLASS="COMMAND">cat</TT> 自身会在屏幕上输出你所输入的内容,如同是在重复你刚键入的行。下面的例子显示了 <TTCLASS="COMMAND">cat</TT> 会重复你输入的每一行:</P><DIVCLASS="FIGURE"><ANAME="GR-NAVIGATING-CAT1"></A><DIVCLASS="MEDIAOBJECT"><P><IMGSRC="./figs/basics/cat1.png"></P></DIV><P><B>图 13-5. <TTCLASS="COMMAND">cat</TT> 命令</B></P></DIV><P>要把 <TTCLASS="COMMAND">cat</TT> 的输出重导向到一个文件中,在 shell 提示下键入以下命令(按 <SPANCLASS="KEYCAP"><KEYCAP>[Enter]</KEYCAP></SPAN> 键会把你带到一个空行): </P><TABLECLASS="SCREEN"BGCOLOR="#DCDCDC"WIDTH="100%"><TR><TD><PRECLASS="SCREEN"><TTCLASS="COMMAND">cat > sneakers.txt</TT></PRE></TD></TR></TABLE><DIVCLASS="FIGURE"><ANAME="GR-NAVIGATING-CAT2"></A><DIVCLASS="MEDIAOBJECT"><P><IMGSRC="./figs/basics/cat2.png"></P></DIV><P><B>图 13-6. 把输出重导向到一个文件</B></P></DIV><P>按 <SPANCLASS="KEYCAP"><KEYCAP>[Enter]</KEYCAP></SPAN> 键转到一个空行,然后使用 <SPANCLASS="KEYCAP"><KEYCAP>[Ctrl]</KEYCAP></SPAN>-<SPANCLASS="KEYCAP"><KEYCAP>[D]</KEYCAP></SPAN> 键 来退出 <TTCLASS="COMMAND">cat</TT>。 </P><P>注意到<AHREF="s1-navigating-usingcat.html#GR-NAVIGATING-CAT2">图 13-6</A>中的区别了吗?此处并没有重复显示。这是因为 cat 的标准输出已经被重导向了。重导向的地方是你刚刚制作的一个叫做 <TTCLASS="FILENAME">sneakers.txt</TT> 的崭新文件。 </P><P>当你运行 <TTCLASS="COMMAND">cat</TT> 命令时,你会发现你所在目录中的文件(如果你想列举这些文件,键入 <TTCLASS="COMMAND">ls</TT>)。 </P><P>如前所示,你可以使用 <TTCLASS="COMMAND">cat</TT> 来读取文件。在提示下,键入: </P><TABLECLASS="SCREEN"BGCOLOR="#DCDCDC"WIDTH="100%"><TR><TD><PRECLASS="SCREEN"><TTCLASS="USERINPUT"><B>cat sneakers.txt</B></TT></PRE></TD></TR></TABLE><DIVCLASS="CAUTION"><P></P><TABLECLASS="CAUTION"WIDTH="100%"BORDER="0"><TR><TDWIDTH="25"ALIGN="CENTER"VALIGN="TOP"><IMGSRC="./stylesheet-images/caution.png"HSPACE="5"ALT="小心"></TD><THALIGN="LEFT"VALIGN="CENTER"><B>小心</B></TH></TR><TR><TD> </TD><TDALIGN="LEFT"VALIGN="TOP"><P>在你把输出重导向入文件时,请谨慎从事,因为你会很容易地覆盖一个现存文件!除非你想代替该文件,请确保你所创建的文件名与已经存在的文件名不一样。 </P></TD></TR></TABLE></DIV><P>再把输出重导向到另一个文件,暂且把它叫做 <TTCLASS="FILENAME">home.txt</TT>。在这个例子中,键入命令 <TTCLASS="COMMAND">cat > home.txt</TT>,然后按 <SPANCLASS="KEYCAP"><KEYCAP>[Enter]</KEYCAP></SPAN>,其后跟随: </P><TABLECLASS="SCREEN"BGCOLOR="#DCDCDC"WIDTH="100%"><TR><TD><PRECLASS="SCREEN"><TTCLASS="USERINPUT"><B>bring the coffee home</B></TT><TTCLASS="USERINPUT"><B>take off shoes</B></TT><TTCLASS="USERINPUT"><B>put on sneakers</B></TT><TTCLASS="USERINPUT"><B>make some coffee</B></TT><TTCLASS="USERINPUT"><B>relax!</B></TT></PRE></TD></TR></TABLE><P>现在,在一个空行上,使用 <SPANCLASS="KEYCAP"><KEYCAP>[Ctrl]</KEYCAP></SPAN>-<SPANCLASS="KEYCAP"><KEYCAP>[D]</KEYCAP></SPAN> 键组合来退出 <TTCLASS="COMMAND">cat</TT>。 </P><P>下一步,使用 <TTCLASS="COMMAND">cat</TT> 把 <TTCLASS="FILENAME">home.txt</TT> 和 <TTCLASS="FILENAME">sneakers.txt</TT> 连接起来,然后再把两个文件的输出重导向到一个叫做 <TTCLASS="FILENAME">saturday.txt</TT> 的新文件(你会在<AHREF="s1-navigating-usingcat.html#GR-NAVIGATING-CAT3">图 13-7</A> 中发现一个示例)。键入下面的命令: </P><TABLECLASS="SCREEN"BGCOLOR="#DCDCDC"WIDTH="100%"><TR><TD><PRECLASS="SCREEN"><TTCLASS="USERINPUT"><B>cat sneakers.txt home.txt > saturday.txt</B></TT></PRE></TD></TR></TABLE><DIVCLASS="FIGURE"><ANAME="GR-NAVIGATING-CAT3"></A><DIVCLASS="MEDIAOBJECT"><P><IMGSRC="./figs/basics/cat3.png"></P></DIV><P><B>图 13-7. 连接文件和重导向输出</B></P></DIV><P>你可以看到 <TTCLASS="COMMAND">cat</TT> 已经把 <TTCLASS="FILENAME">home.txt</TT> 添加到 <TTCLASS="FILENAME">sneakers.txt</TT> 的结尾处。 </P></DIV><DIVCLASS="SECT2"><H2CLASS="SECT2"><ANAME="S2-NAVIGATING-APPENDING"></A>13.9.2. 后补标准输出</H2><P>你可以使用输出重导向来在一个现存文件之后添加新信息。这与你使用 > 符号相似,你是在告诉 shell 把信息发送到标准输出之外的某个地方。 </P><P>然而,当你使用 >> 时,你是在给文件<ICLASS="EMPHASIS">添加</I>信息,而不是完全替换文件内容。 </P><P>最好的解释方法是向你演示实例。我们便使用刚才已创建的两个文件(<TTCLASS="FILENAME">sneakers.txt</TT> 和 <TTCLASS="FILENAME">home.txt</TT>),然后使用后补输出的符号把它们连接起来。你想把 <TTCLASS="FILENAME">home.txt</TT> 的信息添加到 <TTCLASS="FILENAME">sneakers.txt</TT> 的信息中去,因此键入: </P><TABLECLASS="SCREEN"BGCOLOR="#DCDCDC"WIDTH="100%"><TR><TD><PRECLASS="SCREEN"><TTCLASS="COMMAND">cat home.txt >> sneakers.txt</TT></PRE></TD></TR></TABLE><P>现在,使用 <TTCLASS="COMMAND">cat sneakers.txt</TT> 的命令来检查一下。最终的输出在文件结尾处显示了 <TTCLASS="FILENAME">home.txt</TT> 的内容: </P><TABLECLASS="SCREEN"BGCOLOR="#DCDCDC"WIDTH="100%"><TR><TD><PRECLASS="SCREEN"><TTCLASS="COMPUTEROUTPUT">buy some sneakersthen go to the coffee shopthen buy some coffeebring the coffee hometake off shoesput on sneakersmake some coffeerelax!</TT></PRE></TD></TR></TABLE><P>你键入的命令把文件 <TTCLASS="FILENAME">home.txt</TT> 的输出后补到文件 <TTCLASS="FILENAME">sneakers.txt</TT> 中去。 </P><P>通过后补输出,你利用了现存文件而不必创建新文件,从而为自己节省些时间(以及一些磁盘群集)。 </P><P>现在比较一下文件 <TTCLASS="FILENAME">sneakers.txt</TT> 和文件 <TTCLASS="FILENAME">saturday.txt</TT> 的结果,你就会看到它们一模一样。要做比较,键入: </P><TABLECLASS="SCREEN"BGCOLOR="#DCDCDC"WIDTH="100%"><TR><TD><PRECLASS="SCREEN"><TTCLASS="COMMAND">cat sneakers.txt; cat saturday.txt</TT></PRE></TD></TR></TABLE><P>这两个文件的内容都会被显示 — 先是 <TTCLASS="FILENAME">sneakers.txt</TT> 文件,然后是 <TTCLASS="FILENAME">saturday.txt</TT> 文件 (如 <AHREF="s1-navigating-usingcat.html#GR-NAVIGATING-CAT4">图 13-8</A> 所示)。 </P><DIVCLASS="FIGURE"><ANAME="GR-NAVIGATING-CAT4"></A><DIVCLASS="MEDIAOBJECT"><P><IMGSRC="./figs/basics/cat4.png"></P></DIV><P><B>图 13-8. 串联命令和比较文件</B></P></DIV></DIV><DIVCLASS="SECT2"><H2CLASS="SECT2"><ANAME="S2-NAVIGATING-REDIRINPUT"></A>13.9.3. 重导向标准输入</H2><P>你不但可以重导向标准输出,还可以重导向标准输入。 </P><P>当你使用重导向标准输入符号 < 时,你是在告诉 shell 你想使用某个文件作为命令的输入。 </P><P>使用一个你已创建的文件来演示这一概念。键入: </P><TABLECLASS="SCREEN"BGCOLOR="#DCDCDC"WIDTH="100%"><TR><TD><PRECLASS="SCREEN"><TTCLASS="COMMAND">cat < sneakers.txt</TT></PRE></TD></TR></TABLE><P>因为你用来分隔 <TTCLASS="COMMAND">cat</TT> 命令和文件的是小于号(<),<TTCLASS="FILENAME">sneakers.txt</TT> 的输出就被 <TTCLASS="COMMAND">cat</TT> 命令读取。 </P><DIVCLASS="FIGURE"><ANAME="GR-NAVIGATING-CAT5"></A><DIVCLASS="MEDIAOBJECT"><P><IMGSRC="./figs/basics/cat5.png"></P></DIV><P><B>图 13-9. 重导向标准输入</B></P></DIV></DIV></DIV><DIVCLASS="NAVFOOTER"><HRALIGN="LEFT"WIDTH="100%"><TABLESUMMARY="Footer navigation table"WIDTH="100%"BORDER="0"CELLPADDING="0"CELLSPACING="0"><TR><TDWIDTH="33%"ALIGN="left"VALIGN="top"><AHREF="s1-navigating-washing.html"ACCESSKEY="P">后退</A></TD><TDWIDTH="34%"ALIGN="center"VALIGN="top"><AHREF="index.html"ACCESSKEY="H">起点</A></TD><TDWIDTH="33%"ALIGN="right"VALIGN="top"><AHREF="s1-navigating-pipes.html"ACCESSKEY="N">前进</A></TD></TR><TR><TDWIDTH="33%"ALIGN="left"VALIGN="top">清除和重设终端</TD><TDWIDTH="34%"ALIGN="center"VALIGN="top"><AHREF="ch-basics.html"ACCESSKEY="U">上级</A></TD><TDWIDTH="33%"ALIGN="right"VALIGN="top">管道和分页器</TD></TR></TABLE></DIV></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -