在Linux中编辑文件的5种内置方法
软件包管理器和第三方插件可以成为生产力的神奇奇迹。它们可以节省时间,并提供简单的方法来扩展应用程序和操作系统的功能。但是当这些工具无法使用时,会发生什么?当你必须完全依赖你的操作系统所附带的东西时?当你的网络连接消失的时候?
在Linux世界中,许多发行版都预装了各种奇妙的程序和工具。如果你在使用一台离线机器时遇到困难,或者在你可以安装的软件上受到严重限制(由于空间、政策等原因),那么使用标准工具工作可能是唯一的选择。
在这篇文章中,我们将探讨一些默认的Linux工具,供你处理文本文件。这些工具中有些是真正的文本编辑器,有些则是具有广泛功能的通用程序和语言。学习这些永恒的工具将帮助你在有限的系统中工作时更加灵活。
1.vi(m)
这是一个经典的、用之不尽的编辑器,已经存在了45年之久。vi编辑器提供了一个快速、灵活的可视化文本编辑器,你可以以大量不同的方式进行扩展和定制。最重要的是,这个编辑器在几乎所有的Linux发行版上都是默认可用的。
一开始使用vi可能令人生畏,但一旦你熟悉了基本的命令集,你就会马上飞快地浏览文件。下面是一些基本的vi命令,可以让你开始使用。
尽管大多数用户都熟悉vim,但这并不总是默认可用的。有时vim必须通过软件包管理器单独安装。出于这个原因,熟悉基本的vi用法是很有好处的,反正大部分都可以直接翻译成vim。
2. sed
sed(或称 "流编辑器")工具比vi还要古老(1974年)。这个微妙的高级程序能够以许多不同的、有趣的方式处理文本。尽管sed有一个很高的学习曲线,但一旦你掌握了自定义语法,可能性几乎是无穷无尽的。
为了处理一个文件,sed在每一行上循环,并根据用户的期望条件应用不同的操作。sed中甚至有一个小的编程语言,用于提供复杂的替换和其他精确的选择器。
比方说,你有一个文件,里面有以下文字。
# file.txtfoobarbazfoobarbaz
如果你想对某些行进行修改,并用新的文本替换它们,会怎么样?用sed你可以很容易地做到这一点。使用就地编辑功能sed将只替换与foo 匹配的行。
sed -i 's/foo/FOO/' file.txt
你可以通过管道在命令行上进行修改,直接调用sed来进行就地编辑(使用-i ),或者将sed构建到另一个程序中以利用其文本处理能力。有大量的方法来使用这个非常方便的工具。
3. nano
尽管没有像其功能更丰富的对应软件vi那样流行,但nano编辑器却无限地简单和容易上手。这个编辑器简单明了,甚至在主窗口的底部还包括基本的使用信息,以备你需要提醒。
启动和运行nano需要很少的记忆。它非常适用于那些只想对文件进行一些快速修改的初学者。Nano最适合于快速编辑,由于它的功能有限,不太适合全面开发。
4.echo
接下来,我们有一个久经考验的、真正的、几乎随处可见的echo 工具。这不是一个编辑器,但它是一个快速覆盖或添加文本到文件的方法。如果你想以编程方式将项目添加到一个文件中,或者你只是在赶时间,你可以将它们echo 。
如果要用新的文本覆盖一个文件的所有内容,你可以执行类似的操作。
echo "my cool text" > file.txt
如果你只想追加到文件中,你可以运行。
echo "some more text" >> file.txt
如果你正在用其他程序的输出在命令行上工作,并想把它保存到一个文件中,并添加一些内容,你也可以这样做。
echo "the current date is: $(date)" > file.txt
虽然你没有得到一个实际的文本编辑器或解析语言的全部灵活性,但你确实有能力以最小的麻烦将文本保存到一个文件中。
5.AWK
AWK是一个绝对的经典(1977年),也是另一个拥有自己的专用语言的程序。与sed类似,AWK允许你处理文本文件并操作其内容。AWK语言比sed的更强大一些,允许更高级的数据提取技术。使用AWK,你可以很容易地开发出一套广泛的规则,以确定文件中极其具体的模式。
让我们来看看前面的那个文本文件。
# file.txtfoobarbazfoobarbaz
假设我们只想抓取包含foo 的行。使用AWK,我们可以通过简单地传递一个正则表达式来实现这个目的。
awk '/foo/' file.txt
这将输出。
foofoo
很简单,对吗?AWK的优势在于它涉及到表格数据。假设你有一个多列的文件,像这样。
# file2.txtfoo foo2bar bar2baz baz2foo foo2bar bar2baz baz2
如果你想只得到第二列,你可以做这样的事情。
awk '{ print $2 }' file2.txt
这将输出。
foo2bar2baz2foo2bar2baz2
虽然AWK没有像sed那样提供一个默认的就地编辑文件的方法,但是可以很容易地把输出的内容输送到一个新的文件中。要操作一个现有文件的内容并保存一个新的文件,你可以使用下面的片段。
awk '{ print $2 }' file2.txt > results.txt
现在在results.txt 文件中,你将只看到AWK的输出。
请查看GNU Awk用户指南,其中有大量关于构建表达式和开始使用AWK的文档。
谢谢你的阅读!