12 个有用的命令,用于过滤 Linux 中有效的文件操作文本
在本文中,我们将介绍 Linux 中充当过滤器的一些命令行工具。过滤器是一种读取标准输入、对其执行操作并将结果写入标准输出的程序。
因此,它可以用于以强大的方式处理信息,例如重组输出以生成有用的报告、修改文件中的文本以及许多其他系统管理任务。
话虽如此,以下是 Linux 中的一些有用的文件或文本过滤器。
1. Awk 命令
Awk是一种出色的模式扫描和处理语言,它可用于在 Linux 中构建有用的过滤器。您可以通过阅读我们的 Awk 系列第 1 部分至第 13 部分来开始使用它。
此外,还可以阅读awk手册页以获取更多信息和使用选项:
$ man awk
2. Sed 命令
sed是一款功能强大的流编辑器,可用于过滤和转换文本。我们已经撰写了两篇有关 sed 的有用文章,您可以在此处阅读:
sed 手册页添加了控制选项和说明:
$ man sed
3. Grep、Egrep、Fgrep、Rgrep 命令
这些过滤器输出与给定模式匹配的行。它们从文件或标准输入读取行,并默认将所有匹配的行打印到标准输出。
注意:主程序是grep ,其变化与使用特定的 grep 选项完全相同,如下所示(并且它们仍用于向后兼容):
$ egrep = grep -E $ fgrep = grep -F $ rgrep = grep -r
以下是一些基本的 grep 命令:
example@Example ~ $ grep "aaronkilik" /etc/passwd aaronkilik:x:1001:1001::/home/aaronkilik: example@Example ~ $ cat /etc/passwd | grep "aronkilik" aaronkilik:x:1001:1001::/home/aaronkilik:
您可以阅读更多关于Linux 中 Grep、Egrep 和 Fgrep 之间有什么区别?。
4. head 命令
head用于显示文件的第一部分,默认输出前10行。您可以使用-n
num 标志指定要显示的行数:
example@Example ~ $ head /var/log/auth.log Jan 2 10:45:01 Example CRON[3383]: pam_unix(cron:session): session opened for user root by (uid=0) Jan 2 10:45:01 Example CRON[3383]: pam_unix(cron:session): session closed for user root Jan 2 10:51:34 Example sudo: example : TTY=unknown ; PWD=/home/example ; USER=root ; COMMAND=/usr/lib/linuxmint/mintUpdate/checkAPT.py Jan 2 10:51:34 Example sudo: pam_unix(sudo:session): session opened for user root by (uid=0) Jan 2 10:51:39 Example sudo: pam_unix(sudo:session): session closed for user root Jan 2 10:55:01 Example CRON[4099]: pam_unix(cron:session): session opened for user root by (uid=0) Jan 2 10:55:01 Example CRON[4099]: pam_unix(cron:session): session closed for user root Jan 2 11:05:01 Example CRON[4138]: pam_unix(cron:session): session opened for user root by (uid=0) Jan 2 11:05:01 Example CRON[4138]: pam_unix(cron:session): session closed for user root Jan 2 11:09:01 Example CRON[4146]: pam_unix(cron:session): session opened for user root by (uid=0) example@Example ~ $ head -n 5 /var/log/auth.log Jan 2 10:45:01 Example CRON[3383]: pam_unix(cron:session): session opened for user root by (uid=0) Jan 2 10:45:01 Example CRON[3383]: pam_unix(cron:session): session closed for user root Jan 2 10:51:34 Example sudo: example : TTY=unknown ; PWD=/home/example ; USER=root ; COMMAND=/usr/lib/linuxmint/mintUpdate/checkAPT.py Jan 2 10:51:34 Example sudo: pam_unix(sudo:session): session opened for user root by (uid=0) Jan 2 10:51:39 Example sudo: pam_unix(sudo:session): session closed for user root
了解如何将head 命令与 tail 和 cat 命令结合使用,以便在 Linux 中有效使用。
5. tail 命令
tail输出文件的最后部分(默认10-n
行)。使用num 开关指定要显示的行数。
下面的命令将输出指定文件的最后5行:
example@Example ~ $ tail -n 5 /var/log/auth.log Jan 6 13:01:27 Example sshd[1269]: Server listening on 0.0.0.0 port 22. Jan 6 13:01:27 Example sshd[1269]: Server listening on :: port 22. Jan 6 13:01:27 Example sshd[1269]: Received SIGHUP; restarting. Jan 6 13:01:27 Example sshd[1269]: Server listening on 0.0.0.0 port 22. Jan 6 13:01:27 Example sshd[1269]: Server listening on :: port 22.
此外,tail还有一个特殊选项-f
,可以实时观察文件(尤其是日志文件)的变化。
以下命令将使您能够监视指定文件中的更改:
example@Example ~ $ tail -f /var/log/auth.log Jan 6 12:58:01 Example sshd[1269]: Server listening on :: port 22. Jan 6 12:58:11 Example sshd[1269]: Received SIGHUP; restarting. Jan 6 12:58:12 Example sshd[1269]: Server listening on 0.0.0.0 port 22. Jan 6 12:58:12 Example sshd[1269]: Server listening on :: port 22. Jan 6 13:01:27 Example sshd[1269]: Received SIGHUP; restarting. Jan 6 13:01:27 Example sshd[1269]: Server listening on 0.0.0.0 port 22. Jan 6 13:01:27 Example sshd[1269]: Server listening on :: port 22. Jan 6 13:01:27 Example sshd[1269]: Received SIGHUP; restarting. Jan 6 13:01:27 Example sshd[1269]: Server listening on 0.0.0.0 port 22. Jan 6 13:01:27 Example sshd[1269]: Server listening on :: port 22.
阅读tail手册页以获取完整的使用选项和说明列表:
$ man tail
6.sort 命令
sort用于对文本文件或标准输入的行进行排序。
以下是名为domains.list的文件的内容:
example@Example ~ $ cat domains.list example.com example.com news.example.com news.example.com linuxsay.com linuxsay.com windowsmint.com windowsmint.com
您可以运行一个简单的排序命令来对文件内容进行排序,如下所示:
example@Example ~ $ sort domains.list linuxsay.com linuxsay.com news.example.com news.example.com example.com example.com windowsmint.com windowsmint.com
您可以以多种方式使用sort命令,请阅读以下有关 sort 命令的一些有用文章:
- Linux 'sort' 命令的 14 个有用示例 - 第一部分
- 7 个有趣的 Linux ‘sort’ 命令示例 - 第二部分
- 如何根据修改日期和时间查找和排序文件
- 如何按上次修改日期和时间对 ls 命令的输出进行排序
7. uniq 命令
uniq命令用于报告或省略重复的行,它从标准输入中过滤行并将结果写入标准输出。
对输入流运行排序后,您可以使用uniq删除重复的行,如下例所示。
要指示某一行出现的次数,请使用该-c
选项,并通过包含以下选项来忽略大小写的差异-i
:
example@Example ~ $ cat domains.list example.com example.com news.example.com news.example.com linuxsay.com linuxsay.com windowsmint.com example@Example ~ $ sort domains.list | uniq -c 2 linuxsay.com 2 news.example.com 2 example.com 1 windowsmint.com
阅读uniq手册页以获取更多使用信息和标志:
$ man uniq
8. fmt 命令
fmt简单最佳文本格式化程序,它重新格式化指定文件中的段落并将结果打印到标准输出。
以下是从文件domain-list.txt中提取的内容:
1.example.com 2.news.example.com 3.linuxsay.com 4.windowsmint.com
要将上述内容重新格式化为标准列表,请运行以下命令并使用-w
开关定义最大行宽:
example@Example ~ $ cat domain-list.txt 1.example.com 2.news.example.com 3.linuxsay.com 4.windowsmint.com example@Example ~ $ fmt -w 1 domain-list.txt 1.example.com 2.news.example.com 3.linuxsay.com 4.windowsmint.com
9. pr 命令
pr命令转换文本文件或标准输入以供打印。例如在Debian系统上,您可以按如下方式列出所有已安装的软件包:
$ dpkg -l
要按页面和列组织列表以供打印,请发出以下命令。
example@Example ~ $ 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 .....
这里使用的标志是:
--column
定义在输出中创建的列数。-l
指定页面长度(默认为 66 行)。
10. tr 命令
此工具从标准输入翻译或删除字符并将结果写入标准输出。
使用tr的语法如下:
$ tr options set1 set2
看一下下面的例子,在第一个命令中,set1( [:upper:] )
代表输入字符的大小写(全部大写)。
Thenset2([:lower:])
表示结果字符的情况。第二个示例中的情况也一样,转义序列\n
表示在新行上打印输出:
example@Example ~ $ echo "www.example.com" | tr [:upper:] [:lower:] www.example.com example@Example ~ $ echo "news.example.com" | tr [:lower:] [:upper:] NEWS.Example.com
11. more 命令
more命令是一个有用的文件浏览过滤器,主要用于查看证书。它以页面格式显示文件内容,用户可以按[Enter]查看更多信息。
您可以使用它来查看大文件,如下所示:
example@Example ~ $ 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命令相反,但是它提供了额外的功能,并且处理大文件时速度更快。
使用方法与 more 相同:
example@Example ~ $ 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 中充当文本过滤器的有用的命令行工具。