标签 Tab 下的文章

Expand And Unexpand Commands Explained

本指南通过实际的例子解释两个 Linux 命令,即 expandunexpand。对于好奇的人,expandunexpand 命令用于将文件中的 TAB 字符替换为空格,反之亦然。在 MS-DOS 中也有一个名为 expand 的命令,它用于解压压缩文件。但 Linux 的 expand 命令只是将 TAB 转换为空格。这两个命令是 GNU coreutils 包的一部分,由 David MacKenzie 编写。

为了演示,我将在本文使用名为 ostechnix.txt 的文本文件。下面给出的所有命令都在 Arch Linux 中进行测试。

expand 命令示例

与我之前提到的一样,expand 命令使用空格替换文件中的 TAB 字符。

现在,让我们将 ostechnix.txt 中的 TAB 转换为空格,并将结果写入标准输出:

$ expand ostechnix.txt

如果你不想在标准输出中显示结果,只需将其写入另一个文件,如下所示。

$ expand ostechnix.txt>output.txt

我们还可以将标准输入中的 TAB 转换为空格。为此,只需运行 expand 命令而不带文件名:

$ expand

只需输入文本并按回车键就能将 TAB 转换为空格。按 CTRL+C 退出。

如果你不想转换非空白字符后的 TAB,请使用 -i 标记,如下所示。

$ expand -i ostechnix.txt

我们还可以设置每个 TAB 为指定数字的宽度,而不是 8(默认值)。

$ expand -t=5 ostechnix.txt

我们甚至可以使用逗号分隔指定多个 TAB 位置,如下所示。

$ expand -t 5,10,15 ostechnix.txt

或者,

$ expand -t "5 10 15" ostechnix.txt

有关更多详细信息,请参阅手册页。

$ man expand

unexpand 命令示例

正如你可能已经猜到的那样,unexpand 命令将执行与 expand 命令相反的操作。即它会将空格转换为 TAB。让我向你展示一些例子,以了解如何使用 unexpand 命令。

要将文件中的空白(当然是空格)转换为 TAB 并将输出写入标准输出,请执行以下操作:

$ unexpand ostechnix.txt

如果要将输出写入文件而不是仅将其显示到标准输出,请使用以下命令:

$ unexpand ostechnix.txt>output.txt

从标准输出读取内容,将空格转换为制表符:

$ unexpand

默认情况下,unexpand 命令仅转换初始的空格。如果你想转换所有空格而不是只是一行开头的空格,请使用 -a 标志:

$ unexpand -a ostechnix.txt

仅转换一行开头的空格(请注意它会覆盖 -a):

$ unexpand --first-only ostechnix.txt

使多少个空格替换成一个 TAB,而不是 8(会启用 -a):

$ unexpand -t 5 ostechnix.txt

相似地,我们可以使用逗号分隔指定多个 TAB 的位置。

$ unexpand -t 5,10,15 ostechnix.txt

或者,

$ unexpand -t "5 10 15" ostechnix.txt

有关更多详细信息,请参阅手册页。

$ man unexpand

在处理大量文件时,expandunexpand 命令对于用空格替换不需要的 TAB 时非常有用,反之亦然。


via: https://www.ostechnix.com/expand-and-unexpand-commands-tutorial-with-examples/

作者:sk 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Linux 终端不仅是一个键入命令的地方。如若你能熟谙这些基础技巧,那么你会在绝大多数 Linux 发行版的默认使用的 Bash shell中游刃有余。

这是howtogeek.com 网站特供给初级用户升级打怪时不能忘记携带的七种武器——

1.Tab 补全

这样能节省时间,并且对于输入那些你不很确定其具体名称的文件和命令来说很方便。比如,当前目录下有一个名为“really long file name”的文件,你想要删除它。你可以输入完整的文件名,但是你必须确保正确地输入了空格和每个字母。若当前目录下还有许多以字母“r”开头的文件,(如果你没有正确地输入字符) Bash 将不知道你想要删除哪一个文件。

如果在当前目录下存在着另一个名为“really very long file name”的文件,你敲击了Tab键。Bash 将为所有以“r”开头的文件自动补充“really\ ”部分。此时继续敲击Tab键,你将得到匹配所有文件名的列表。

2.管道机制

这种机制允许你把一条命令的输出传送到另一条命令。按照 UNIX 哲学,每个程序都足够小,只做一件事并将之做到最好。例如,ls命令列出当前目录下的所有文件,grep命令搜索输入其中的指定检索项。

你可以通过管道机制(|字符)把二者结合起来,在当前目录下搜索文件。以下给出的命令(在当前文件夹下)搜索关键字为“word”的文件:

ls | grep word

3.通配符

“*”(星号)字符是一种匹配任意长度字符的通配符。比如,你想删除当前文件夹下名为“really long file name”和“really very long file name”的两个文件,你可以运行以下命令:

rm really*name

这条命令会删除所有以“really”开头以“name”结尾的文件。但是,如果你运行的是 rm * 这条命令,你将会删除文件夹下的所有文件。(译注:使用通配符时要小心,尤其是你的rm没有-f确认时!)

4.输出重定向

“>”字符可以把一条命令的输出重定向到一个文件或另一条命令。比如,下面这行命令执行完 ls 后会列出当前文件夹下的所有文件,其结果不是在终端显示,而是输出到当前文件夹下一个名为“file1”的文件中去:

ls > file1

5.历史记录

Bash 能记住你以前输入过的命令,上、下方向键可以逐行调出它们。使用 history 命令打印历史记录,以管道机制 grep 选择性地输出你想要的结果。

~
. 
..

“~”,也叫做波浪符,用来表示当前用户的主目录。相比通过 cd /home/name 到达你的主目录,你可以输入 cd ~ 来达到相同效果。这点也可以在相关路径上使用:比如 cd ~/Desktop 能够到达当前用户的 Desktop 目录。

同样,“.”代表当前目录,“..”代表当前目录的父目录。使用 cd .. 可以返回上一级目录。它们也可以用在相关路径上,举例说明:你当前处在 Desktop 文件夹下,通过 cd ../Documents 命令,你可以转到与 Desktop 共有同一父文件夹的 Documents 文件夹去。

(译注:“-”代表前一个目录,cd - 可以返回到前一个工作目录。)

6.后台命令

Bash 默认情况下会在当前终端下执行你键入的每条命令。通常这样是没有问题的,但是如果你想要在启动某个应用后继续使用终端呢?通过输入 firefox 启动火狐浏览器,你的终端将被错误提示等各种信息输出占据,直到你关闭火狐浏览器为止。在 Bash 中你可以通过在命令结尾添加“&”操作符来后台执行程序。

firefox &

7.条件执行

Bash 也可以连续执行两条命令。 第二条命令仅在第一条命令成功执行后才会开始执行。如要如此,你可以通过键入“&&”,也就是两个“&”字符进行分隔,在同一行输入两条命令。下面给出的命令会在等待 5 秒后运行 gnome-screenshot 工具:

sleep 5 && gnome-screenshot 

via: http://www.efytimes.com/e1/fullnews.asp?edid=123564

译者:SteveArcher 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出