12个有用的命令用于过滤文本以在Linux中进行有效的文件操作

本文介绍了一些有用的命令,用于过滤文本以进行有效的文件操作,如查找文件,修改文件和其他sysadmin相关

在本文中,我们将回顾一些在Linux中充当过滤器的命令行工具。过滤器是一个程序,读取标准输入,在它执行操作,并将结果写到标准输出。 因此,它可以用于以强大的方式处理信息,例如重组输出以生成有用的报告,修改文件中的文本和许多其他系统管理任务。 说到这里,下面是一些有用的文件或文本过滤器在Linux。

1. Awk命令

AWK是一个了不起的模式扫描和处理语言,它可以用来在Linux中建立有用的过滤器。 你可以开始通过我们的阅读使用它awk的系列第1至第13部分 。 此外,还通过提供更多信息和使用选项awk的手册页阅读:
$ man awk

2. Sed命令

SED是用于过滤和转换文本功能强大的流编辑器。我们已经写了两篇关于sed的有用的文章,你可以在这里:
  1. 如何使用GNU'sed'命令在Linux中创建,编辑和操作文件
  2. 15个有用的“sed”命令提示和技巧的日常Linux系统管理任务
sed手册页添加了控制选项和说明:
$ man sed

3. Grep,Egrep,Fgrep,Rgrep命令

这些滤波器输出与给定模式匹配的线。它们从文件或标准输入读取行,并将所有匹配的行默认打印为标准输出。 :主程序是grep ,变化只是一样使用特定grep的选项如下(和他们仍然被用于向后兼容):
$ egrep = grep -E
$ fgrep = grep -F
$ rgrep = grep -r  
下面是一些基本的grep命令:
howtoing@HowToing ~ $ grep "aaronkilik" /etc/passwd
aaronkilik:x:1001:1001::/home/aaronkilik:
howtoing@HowToing ~ $ cat /etc/passwd | grep "aronkilik"
aaronkilik:x:1001:1001::/home/aaronkilik:
你可以阅读更多关于Linux中的grep,EGREP和fgrep有什么区别?

4. head命令

head命令用于显示一个文件的第一部分,它由缺省输出第一10行。 您可以使用-n NUM标志指定的行数将显示:
howtoing@HowToing ~ $ head /var/log/auth.log  
Jan  2 10:45:01 HowToing CRON[3383]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan  2 10:45:01 HowToing CRON[3383]: pam_unix(cron:session): session closed for user root
Jan  2 10:51:34 HowToing sudo:  howtoing : TTY=unknown ; PWD=/home/howtoing ; USER=root ; COMMAND=/usr/lib/linuxmint/mintUpdate/checkAPT.py
Jan  2 10:51:34 HowToing sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
Jan  2 10:51:39 HowToing sudo: pam_unix(sudo:session): session closed for user root
Jan  2 10:55:01 HowToing CRON[4099]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan  2 10:55:01 HowToing CRON[4099]: pam_unix(cron:session): session closed for user root
Jan  2 11:05:01 HowToing CRON[4138]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan  2 11:05:01 HowToing CRON[4138]: pam_unix(cron:session): session closed for user root
Jan  2 11:09:01 HowToing CRON[4146]: pam_unix(cron:session): session opened for user root by (uid=0)
howtoing@HowToing ~ $ head  -n 5 /var/log/auth.log  
Jan  2 10:45:01 HowToing CRON[3383]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan  2 10:45:01 HowToing CRON[3383]: pam_unix(cron:session): session closed for user root
Jan  2 10:51:34 HowToing sudo:  howtoing : TTY=unknown ; PWD=/home/howtoing ; USER=root ; COMMAND=/usr/lib/linuxmint/mintUpdate/checkAPT.py
Jan  2 10:51:34 HowToing sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
Jan  2 10:51:39 HowToing sudo: pam_unix(sudo:session): session closed for user root
了解如何使用head命令、tail和cat命令在Linux中有效使用。

5.tail命令

tail输出一个文件的最后部分(10行默认情况下)。 使用-n NUM开关来指定要显示的行数。 下面将输出命令的最后5行指定的文件:
howtoing@HowToing ~ $ tail -n 5 /var/log/auth.log
Jan  6 13:01:27 HowToing sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan  6 13:01:27 HowToing sshd[1269]: Server listening on :: port 22.
Jan  6 13:01:27 HowToing sshd[1269]: Received SIGHUP; restarting.
Jan  6 13:01:27 HowToing sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan  6 13:01:27 HowToing sshd[1269]: Server listening on :: port 22.
此外, tail有一个特殊的选项-f看实时文件的变化 (尤其是日志文件)。 以下命令将使您能够监视指定文件中的更改:
howtoing@HowToing ~ $ tail -f /var/log/auth.log
Jan  6 12:58:01 HowToing sshd[1269]: Server listening on :: port 22.
Jan  6 12:58:11 HowToing sshd[1269]: Received SIGHUP; restarting.
Jan  6 12:58:12 HowToing sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan  6 12:58:12 HowToing sshd[1269]: Server listening on :: port 22.
Jan  6 13:01:27 HowToing sshd[1269]: Received SIGHUP; restarting.
Jan  6 13:01:27 HowToing sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan  6 13:01:27 HowToing sshd[1269]: Server listening on :: port 22.
Jan  6 13:01:27 HowToing sshd[1269]: Received SIGHUP; restarting.
Jan  6 13:01:27 HowToing sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan  6 13:01:27 HowToing sshd[1269]: Server listening on :: port 22.
通读为使用选项和指令的完整列表tail手册页:
$ man tail

6. sort命令

sort用于文本文件或来自标准输入的行进行排序。 下面是一个名为domains.list文件的内容:
howtoing@HowToing ~ $ cat domains.list
howtoing.com
howtoing.com
news.howtoing.com
news.howtoing.com
linuxsay.com
linuxsay.com
windowsmint.com
windowsmint.com
您可以运行一个简单的sort命令来像这样的文件内容进行排序:
howtoing@HowToing ~ $ sort domains.list
linuxsay.com
linuxsay.com
news.howtoing.com
news.howtoing.com
howtoing.com
howtoing.com
windowsmint.com
windowsmint.com
您可以以多种方式使用sort命令,通过一些对sort命令的有用的文章如下:
  1. 14个有用的例子Linux'sort'命令 - 第1部分
  2. 7个有趣的Linux'sort'命令示例 - 第2部分
  3. 如何根据修改日期和时间查找和排序文件
  4. https://www.howtoing.com/sort-ls-output-by-last-modified-date-and-time/

7. uniq命令

uniq命令是用来报告或省略重复的线条,它过滤从标准输入线和结果写到标准输出。 在输入流运行排序后,您可以删除重复的uniq行作为在下面的例子。 若要指示线出现的次数,使用-c选项,忽略大小写差异,同时通过包括比较-i选项:
howtoing@HowToing ~ $ cat domains.list
howtoing.com
howtoing.com
news.howtoing.com
news.howtoing.com
linuxsay.com
linuxsay.com
windowsmint.com
howtoing@HowToing ~ $ sort domains.list | uniq -c 
2 linuxsay.com
2 news.howtoing.com
2 howtoing.com
1 windowsmint.com 
通读进一步使用信息和标志的uniq的手册页:
$ man uniq

8. fmt命令

fmt简单的最佳文本格式化,它重新格式化指定的文件并打印结果到标准输出段落。 以下是文件domain-list.txt提取的内容:
1.howtoing.com 2.news.howtoing.com 3.linuxsay.com 4.windowsmint.com
要重新上述内容到标准列表,运行使用以下命令-w开关用来定义最大线宽:
howtoing@HowToing ~ $ cat domain-list.txt 
1.howtoing.com 2.news.howtoing.com 3.linuxsay.com 4.windowsmint.com
howtoing@HowToing ~ $ fmt -w 1 domain-list.txt
1.howtoing.com 
2.news.howtoing.com 
3.linuxsay.com 
4.windowsmint.com

9. pr命令

pr命令转换成文本文件或标准输入打印。 例如在Debian系统,你可以列出所有已安装的软件包,如下所示:
$ dpkg -l
要以可以打印的页面和列组织列表,请发出以下命令。
howtoing@HowToing ~ $ dpkg -l | pr --columns 3 -l 20  
2017-01-06 13:19                                                  Page 1
Desired=Unknown/Install ii  adduser		ii  apg
| Status=Not/Inst/Conf- ii  adwaita-icon-theme	ii  app-install-data
|/ Err?=(none)/Reinst-r ii  adwaita-icon-theme- ii  apparmor
||/ Name		ii  alsa-base		ii  apt
+++-=================== ii  alsa-utils		ii  apt-clone
ii  accountsservice	ii  anacron		ii  apt-transport-https
ii  acl			ii  apache2		ii  apt-utils
ii  acpi-support	ii  apache2-bin		ii  apt-xapian-index
ii  acpid		ii  apache2-data	ii  aptdaemon
ii  add-apt-key		ii  apache2-utils	ii  aptdaemon-data
2017-01-06 13:19                                                  Page 2
ii  aptitude		ii  avahi-daemon	ii  bind9-host
ii  aptitude-common	ii  avahi-utils		ii  binfmt-support
ii  apturl		ii  aview		ii  binutils
ii  apturl-common	ii  banshee		ii  bison
ii  archdetect-deb	ii  baobab		ii  blt
ii  aspell		ii  base-files		ii  blueberry
ii  aspell-en		ii  base-passwd		ii  bluetooth
ii  at-spi2-core	ii  bash		ii  bluez
ii  attr		ii  bash-completion	ii  bluez-cups
ii  avahi-autoipd	ii  bc			ii  bluez-obexd
.....
这里使用的标志是:
  1. --column定义在输出创建的列的数目。
  2. -l指定页面长度(默认值是66行)。

10. tr命令

此工具可将字符从标准输入中转换或删除,并将结果写入标准输出。 使用tr的语法如下:
$ tr options set1 set2
看看下面的例子中,第一个命令, set1( [:upper:] )表示输入字符的情况下(全部大写)。 然后set2([:lower:])表示该角色最终会是这样。 这是在第二个例子和转义序列同样的事情\n是指在新行的打印输出:
howtoing@HowToing ~ $ echo "WWW.HOWTOING.COM" | tr [:upper:] [:lower:]
www.howtoing.com
howtoing@HowToing ~ $ echo "news.howtoing.com" | tr [:lower:] [:upper:]
NEWS.HOWTOING.COM

11. more命令

more命令基本上是证书观看创造了一个有用的文件细读过滤器。 它显示了类似的格式,用户可以按[Enter]键来查看更多信息页面文件的内容。 您可以使用它来查看大文件,如:
howtoing@HowToing ~ $ dmesg | more
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 4.4.0-21-generic (buildd@lgw01-21) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 (Ubuntu 4.4.0-21.37-generic
4.4.6)
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-generic root=UUID=bb29dda3-bdaa-4b39-86cf-4a6dc9634a1b ro quiet splash vt.handoff=7
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
[    0.000000]   Centaur CentaurHauls
[    0.000000] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
[    0.000000] x86/fpu: Supporting XSAVE feature 0x01: 'x87 floating point registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x02: 'SSE registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x04: 'AVX registers'
[    0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.
[    0.000000] x86/fpu: Using 'eager' FPU context switches.
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009d3ff] usable
[    0.000000] BIOS-e820: [mem 0x000000000009d400-0x000000000009ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000a56affff] usable
[    0.000000] BIOS-e820: [mem 0x00000000a56b0000-0x00000000a5eaffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000a5eb0000-0x00000000aaabefff] usable
--More--

12. less命令

less即是more以上命令相反,但它提供了额外的功能,这是一个快一点大文件。 使用方式与更多相同:
howtoing@HowToing ~ $ dmesg | less
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 4.4.0-21-generic (buildd@lgw01-21) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 (Ubuntu 4.4.0-21.37-generic
4.4.6)
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-generic root=UUID=bb29dda3-bdaa-4b39-86cf-4a6dc9634a1b ro quiet splash vt.handoff=7
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
[    0.000000]   Centaur CentaurHauls
[    0.000000] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
[    0.000000] x86/fpu: Supporting XSAVE feature 0x01: 'x87 floating point registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x02: 'SSE registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x04: 'AVX registers'
[    0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.
[    0.000000] x86/fpu: Using 'eager' FPU context switches.
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009d3ff] usable
[    0.000000] BIOS-e820: [mem 0x000000000009d400-0x000000000009ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000a56affff] usable
[    0.000000] BIOS-e820: [mem 0x00000000a56b0000-0x00000000a5eaffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000a5eb0000-0x00000000aaabefff] usable
:
了解为什么“less'是不是'more'命令快于Linux的有效文件导航。 这就是现在,不要让我们知道任何有用的命令行工具,在这里就不提了,充当通过下面的评论部分在Linux中的文本过滤器。