Linux扩大和面板折叠命令听起来像他们可以使文件更大、更小,但他们实际上做的是把标签进入空间和空间选项卡。
在这篇文章中,我们将使用一些简单的文本文件来证明当你使用扩大和面板折叠。我们也会把这些命令的工作方式与一些可能更熟悉的命令sed和awk——可以提供类似的结果,并提供额外的选项。
首先,让我们来看看这个非常简单的文本文件:
美元的猫喂
你好,世界
这是我!
我看着你!
的输出od bc命令可以用来验证提供该文件中的空白标签(八进制值= 011和字符显示为“t \”)而非空格字符序列。
美元od bc你好
0000000 110 145 154 154 157011年127 157 162 154 144 012 124 150 151 163
H e l l o\ tW T o r l d \ n h is
0000020011年151 163011年155 145 041 012 101 156 144011年111年011年141 155
\ t我的年代\ tm e !\ n n d\ t我\ t一个米
0000040 040 154 157 157 153 151 156 147011年141 164 040 171 157 165 041
l o o k i n g\ t一个t y u !
0000060 012
\ n
如果你使用扩大这样的命令在一个文件,你会看到这样的:
美元扩大你好
你好,世界
这是我!
我看着你!
注意,这个输出的样子完全与原始文件相同。为什么?因为,如果没有附加参数,扩大命令替换每个标签而不是单个空格字符,但所需的空间使输出看起来就像原始文件。它也将其输出写到标准输出。保存命令生成的输出所示,我们可以这样做:
美元扩大你好你好
当我们看这两个文件,他们似乎是相同的:
美元的猫喂
你好,世界
这是我!
我看着你!
美元的猫喂
你好,世界
这是我!
我看着你!
当我们列表文件,然而,我们可以看到,新文件25比原来的字符。
$ ls - l你好你好
-rw-r-r -。74 2月2日08:35啦啦你好
-rw-r-r -。1)啦啦49 2月2 08:28你好
如果你使用od bc命令在新文件,你应该注意到的额外字符长序列的空白。
美元od bc你好
0000000 110 145 154 154 157040 040 040127 157 162 154 144 012 124 150
H e l l o W T o r l d \ n H
163 151 0000020040 040 040 040151 163040 040 040 040 040 040155 145
我我年代m e
0000040 041 012 101 156 144040 040 040 040 040111年040 040 040 040 040
!我\ n n d
0000060040 040141 155040年154 157 157 153 151 156 147040 040 040 040
我n g m l o o k
164 040 040 141 0000100040年171 157 165 041 012
一个t y u !\ n
只要记住,在默认情况下,扩大后的输出发送到标准输出。它不会覆盖原始文件,除非您将输出重定向到另一个文件。
限制数量的空格字符
如果你使用- t选择与扩大命令,您可以限制空间用于替换每个选项卡的数量。在下面这个例子中,我们选择用一个空格代替每个选项卡。
扩大美元- t 1你好你好
$ ls - l你好你好
-rw-r-r -。1)啦啦49 2月2 09:02你好
-rw-r-r -。1)啦啦49 2月2 08:28你好
注意到新文件现在有相同数量的字符与原始,但空间的选项卡。
美元od bc你好
0000000 110 145 154 154 157040年127 157 162 154 144 012 124 150 151 163
H e l l o W T o r l d \ n H is
0000020040年151 163040年155 145 041 012 101 156 144040年111年040年141 155
我s m e !\ n n d I m
0000040040年154 157 157 153 151 156 147040年141 164040年171 157 165 041
l o o k i n g t y u !
0000060 012
\ n
如果你使用- t 2而不是- t 1,文件看起来不同,有一些额外的字符:
美元- t 2你好> hello2扩张
猫hello2美元
你好,世界
这是我!
我看着你!
$ ls - l (Hh)嗨*
-rw-r-r -。1)啦啦49 2月2 09:02你好
-rw-r-r -。1)啦啦49 2月2 08:28你好
-rw-r-r -。1)啦啦52 2月2 09:06 hello2
使用- t 4,文件看起来明显不同多达四个空格是用来取代每个选项卡:
扩大美元- t 4你好
你好,世界
这是我!
我看着你!
面板折叠
的面板折叠命令是为了做reverse-change空间选项卡。说我们是开始文件如下所示:
美元猫hello_again Hello World !美元od bc hello_again
154 110 145 154 0000000 157 040 040 040 127 157 162 154 144 041 012
H e l l o W o r l d !\ n
接下来,我们使用面板折叠命令将空格的字符串变成一个标签:
美元unexpand——hello_again | od bc
0000000 110 145 154 154 157011年127 157 162 154 144 041 012
H e l l o\ tW o r l d !\ n
保存结果,我们仍然需要重定向输出如下:
美元unexpand——hello_again > hello2
使用sed
sed可以把文件中的所有标签变成单一的空白。这是文件的sed命令:
美元的猫喂
你好,世界
这是我!
我看着你!
$ sed ' s / \ t / / g '你好
你好,世界
这是我!
我看着你!
单引号内的“s”意味着“替代”\ t代表一个选项卡并对单引号前的“g”意味着“改变所有人”。与扩大命令,您必须将输出重定向到另一个文件,如果你想使用它。
$ sed ' s / \ t / / g '你好你好
不像扩大,sed一个选项卡,一个空间变化。
的sed命令也可以把空格字符变成标签。你只需要反单引号内的标签和空间是这样的:
美元sed的s / / \ t / g你好你好
使用awk
另一个选择是使用一个awk命令如下所示(“OFS”是输出字段分隔符)将标签转化为单个空格:
美元的猫喂| awk的1美元= 1美元OFS = ' '
你好,世界
这是我!
我看着你!
如果你也想要一个文件的每一行的第一个单词是后跟一个冒号分隔的文本,使用这样的命令:
美元猫days_of_week | awk ' 1美元= 1美元”:“‘OFS = ' '周日:放松和享受和平日星期一:计划本周星期二:把垃圾转运站周三:做一些写作周四:清洁猫盒星期五:星期六洗衣服:商店
它将使用单个空格作为分隔符,取代任何标签,将添加一个”:“在每一行的第一个字符串。
将空格变成标签、使用\ t作为输出分隔符:
美元猫days_of_week | awk的1美元= 1美元OFS = ' \ t '
周日放松和享受和平的一天
周一计划本周
周二采取垃圾转运站
周三做一些写作
周四打扫猫盒子
星期五洗衣服
星期六购物
与其他命令一样,您需要将输出重定向到一个新文件来保存它。
猫days_of_week | awk ' 1美元= 1美元”:“‘OFS = " " > daily_tasks
总结
的扩大和面板折叠命令有一些非常具体的用途,但其他命令sed和awk提供了很大的灵活性,可以帮助你,如果你想要一些不同的选择。