| 会员登录 立即注册

打印 上一主题 下一主题

一些命令行小技巧:wc、sort、sed 和 tr

[复制链接]
跳转到指定楼层
楼主
3AAA 发表于 2021-8-12 16:46:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
楼主
3AAA
2021-8-12 16:46:45 3845 2 看楼主


Linux 发行版十分好用,而且它们有一些用户可能不知道的技巧。让我们来看看一些命令行实用工具,当你热衷于终端而不是 GUI 时,它们可能更顺手。

我们都知道在一个系统上使用终端会更高效。当你编辑和排版一个文本文件时,终端会让你确切的感受到,生活如此简单。

本文将向你介绍 wc、sort、tr和sed命令。

wc


wc是一个实用工具,全称是 “word count”。顾名思义,它可以用来统计任何文件的行数、单词数和字节数。

让我们来看看它是如何工作的:
$ wc filenamelines words characters filename
输出的是文件的行数、单词数、字符数和文件名。

想获得特定的输出,我们必须使用选项:
    -c打印字节总数-l打印行数-w打印单词总数-m打印字符总数


wc 示例


让我们来看看它的运行结果。

让我们从一个文本文件 lormipsm.txt开始。首先,我们通过cat查看文件内容,然后使用wc:
$ cat loremipsm.txtLinux is the best-known and most-used open source operating system.As an operating system, Linux is software that sits underneath all of the other software on a computer,receiving requests from those programs and replaying these requests to the computer's hardware.$ wc loremipsm.txt3 41 268 loremipsm.txt
假设我只想查看文件的字节数:
$ wc -c loremipsm.txt268 loremipsm.txt
查看文件的行数:
$ wc -l loremipsm.txt3 loremipsm.txt
查看文件的单词数:
$ wc -w loremipsm.txt41 loremipsm.txt
现在只查看文件的字符数:
$ wc -m loremipsm.txt268 loremipsm.txt

sort


sort命令是最有用的工具之一。它会对文件的数据进行排序。可以根据字符或数字进行升序或降序排列。它也可以用来对文件中的行进行排序和随机化。

使用 sort非常简单。我们需要做的仅仅是提供一个文件名:
$ sort filename
默认的是按照字母顺序对数据进行排序。需要注意的是 sort命令仅仅是对数据进行排序展示。它并不会改写文件。

使用 sort命令的一些有用的选项:
    -r将文件中的行按倒序进行排序-R将文件中的行打乱为随机顺序-o将输出保存到另一个文件中-k按照特定列进行排序-t使用指定的分隔符,而不使用空格-n根据数值对数据进行排序


sort 示例


让我们看看 sort的几个简单示例。

我们有一个 list.txt的文件,包含逗号分隔的名称和数值。

首先让我们打印出文件内容并简单排序:
$ cat list.txtCieran Wilks, 9Adelina Rowland, 4Hayden Mcfarlnd, 1Ananya Lamb, 5Shyam Head, 2Lauryn Fuents, 8Kristian Felix, 10Ruden Dyer, 3Greyson Meyers, 6Luther Cooke, 7$ sort list.txtAdelina Rowland, 4Ananya Lamb, 5Cieran Wilks, 9Greyson Meyers, 6Hayden Mcfarlnd, 1Kristian Felix, 10Lauryn Fuents, 8Luther Cooke, 7Ruden Dyer, 3Shyam Head, 2
现在对数据进行倒序排序:
$ sort -r list.txtShyam Head, 2Ruden Dyer, 3Luther Cooke, 7Lauryn Fuents, 8Kristian Felix, 10Hayden Mcfarlnd, 1Greyson Meyers, 6Cieran Wilks, 9Ananya Lamb, 5Adelina Rowland, 4
让我们打乱数据:
$ sort -R list.txtCieran Wilks, 9Greyson Meyers, 6Adelina Rowland, 4Kristian Felix, 10Luther Cooke, 7Ruden Dyer, 3Lauryn Fuents, 8Hayden Mcfarlnd, 1Ananya Lamb, 5Shyam Head, 2
来看一点更复杂的。这次我们根据第二个字段,也就是数值对数据进行排序,并使用 -o选项将输出保存到另一个文件中:
$ sort -n -k2 -t ',' -o sorted_list.txt list.txt$ ls   sorted_list.txt    list.txt$ cat sorted_list.txtHayden Mcfarlnd, 1Shyam Head, 2Ruden Dyer, 3Adelina Rowland, 4Ananya Lamb, 5Greyson Meyers, 6Luther Cooke, 7Lauryn Fuents, 8Cieran Wilks, 9Kristian Felix, 10
这里我们使用 -n选项按数字顺序进行排序,-k选项用来指定要排序的字段(在本例中为第 2 个字段),-t选项指定分隔符或字段分隔符(逗号),-o选项将输出保存到sorted_list.txt文件中。

sed


sed是一个流编辑器,用于过滤和转换输出中的文本。这意味着我们不需要对原文件进行修改,只需要对输出进行修改。如果需要,我们可以将更改保存到一个新的文件中。sed提供了很多有用的选项用于过滤和编辑数据。

sed的语法格式如下:
$ sed [OPTION] &lsquoATTERN’ filename
sed 常用的一些选项:
    -n取消默认输出p打印指定的数据d删除指定行q退出sed脚本


sed 示例


我们来看看 sed是如何运作的。我们从data文件开始,其中的字段表示编号、名称、年龄和操作系统。

如果行出现在特定的行范围内,该行将打印 2 次:
$ cat data1    Vicky Grant      20   linux2    Nora Burton    19   Mac3    Willis Castillo   21  Windows4    Gilberto Mack 30   Windows5    Aubrey Hayes  17   windows6    Allan Snyder    21   mac7    Freddie Dean   25   linux8    Ralph Martin    19   linux9    Mindy Howard  20   Mac$ sed '3,7 p' data1    Vicky Grant      20   linux2    Nora Burton    19   Mac3    Willis Castillo   21  Windows3    Willis Castillo   21  Windows4    Gilberto Mack 30   Windows4    Gilberto Mack 30   Windows5    Aubrey Hayes  17   windows5    Aubrey Hayes  17   windows6    Allan Snyder    21   mac6    Allan Snyder    21   mac7    Freddie Dean   25   linux7    Freddie Dean   25   linux8    Ralph Martin    19   linux9    Mindy Howard 20   Mac
这里的操作用单引号括起来,表示第 3 行和第 7 行,并且使用了 p打印出符合匹配规则的数据。sed 的默认行为是在解析后打印每一行。这意味着由于使用了p,第 3 行到第 7 行打印了两次。

如何打印文件中特定的行?使用 -n选项来消除在输出中不匹配的行:
$ sed -n '3,7 p' data3    Willis Castillo     21    Windows4    Gilberto Mack    30   Windows5    Aubrey Hayes     17   windows6    Allan Snyder       21   mac7    Freddie Dean      25  linux
使用 ‘-n’ 仅仅只有第 3 行到第 7 行会被打印。

省略文件中的特定行。使用 d从输出中删除行:
$ sed '3 d' data1    Vicky Grant      20    linux2   Nora Burton     19    Mac4   Gilberto Mack  30    Windows5   Aubrey Hayes   17    windows6   Allan Snyder     21    mac7   Freddie Dean    25   linux8   Ralph Martin    19    linux9   Mindy Howard  20   Mac$ sed '5,9 d' data1    Vicky Grant     20   linux2   Nora Burton    19   Mac3   Willis Castillo   21   Windows4   Gilberto Mack 30   Windows
从文件中搜索特定的关键字:
$ sed -n '/linux/ p' data7    Freddie Dean   25  linux8    Ralph Martin   19   linux$ sed -n '/linux/I p' data1     Vicky Grant      20  Linux7     Freddie Dean  25  linux8     Ralph Martin   19  linux
在这些例子中,我们在 / /中使用了一个正则表达式。如果文件中有类似的单词,但大小写不一致,可以使用I使得搜索不区分大小写。回想一下,-n删除了输出中不匹配的行。

替换文件中的单词:
$ sed 's/linux/linus/' data1   Vicky Grant      20   Linux2   Nora Burton    19   Mac3   Willis Castillo   21   Windows4   Gilberto Mack  30  Windows5   Aubrey Hayes   17  windows6   Allan Snyder     21  mac7   Freddie Dean    25 linus8   Ralph Martin    19  linus9   Mindy Howard 20  Mac
这里 s/ / /表示它是一个正则表达式。在两个/之间的就是定位的单词和需要替换的新单词。

tr


tr命令可以用来转换或删除字符。它可以将小写字母转换为大写字母,也可以将大写字母转换为小写字母,可以消除重复字符,也可以删除特定字符。

tr的奇怪之处在于,它不同于wc、sort、sed那样接受文件作为输入。我们使用|(管道符)为tr命令提供输入。
$ cat filename | tr [OPTION]
tr命令使用的一些选项:
    -d删除给定输入第一个集合中的指定字符,不做转换-s将重复出现的字符替换为单个


tr 示例


现在让我们使用 tr命令将letter文件中的所有小写字符转换为大写字符:
$ cat letterLinux is too easy to learn,And you should try it too.$ cat letter | tr 'a-z' 'A-Z'LINUX IS TOO EASY TO LEARN,AND YOU SHOULD TRY IT TOO.
这里的 a-z、A-Z表示我们想要将a到z范围内的小写字符转换为大写字符。

删除文件中的 o字符:
$ cat letter | tr -d 'o'Linux is t easy t learn,And yu shuld try it t.
从文件中压缩字符 o意味着如果o在文件中重复出现,那么它将会被删除并且只打印一次:
$ cat letter | tr -s 'o'Linux is to easy to learn,And you should try it to.

总结


这是使用 wc、sort、sed、tr命令的快速演示。这些命令可以方便快捷的操作终端上的文本文件。你可以使用man命令来了解这些命令的更多信息。

via: https://fedoramagazine.org/command-line-quick-tips-wc-sort-sed-and-tr/

作者:mahesh1b选题:lujun9972译者:perfiffer校对:wxy

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

使用道具 举报

沙发
DJ666 发表于 2021-8-12 16:48:28 | 只看该作者
沙发
DJ666
2021-8-12 16:48:28 看楼主
转发了
回复 支持 反对

使用道具 举报

板凳
金店老板 发表于 2021-8-12 16:50:07 | 只看该作者
板凳
金店老板
2021-8-12 16:50:07 看楼主
转发了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 返回列表

3AAA 当前离线
白银会员

查看:3845 | 回复:2

关于我们  |   侵权投诉受理  |   联系我们  |   Archiver  |  
免责声明:邳州信息网所有言论只代表发表者个人观点,与本站无关
Copyright © 2009-2025 pzxxw.com 版权所有:邳州金银杏文化传媒有限公司  

苏公网安备 32038202000401号

快速回复 返回顶部 返回列表