在本文中,我们将了解Linux中的一些过滤器命令行工具。过滤器是从标准输入读取数据、对数据执行操作并将结果写入标准输出的程序。因此,它可用于以强大的方式处理信息,例如重组输出以生成有用的报告、修改文件内的文本以及许多其他系统管理任务。下面是Linux上一些有用的文件或文本过滤器。1、awk命令awk是一种优秀的模式扫描和处理语言,可以用来在Linux下构建有用的过滤器。您可以通过阅读我们的awk系列的第1到13部分开始使用它。此外,您还可以通过阅读awk的手册页获得更多信息和使用选项。$manawk2,sed命令sed是一个强大的流编辑器,用于过滤和转换文本。我们已经写了两篇关于sed的有用文章,您可以在这里阅读它们:如何在Linux下使用GNUsed命令创建、编辑和操作文件15个有用的sed命令提示,适用于日常Linux系统管理员任务提示和技巧sed手册页增加了控制选项和说明:$mansed3、grep、egrep、fgrep、rgrep命令行这些过滤器输出匹配指定模式的行。它们从文件或标准输入中读取行并输出所有匹配行,默认情况下为标准输出。注意:主程序是grep,这些变体与grep的具体选项相同,如下(为了向后兼容,它们仍然被使用):$egrep=grep-E$fgrep=grep-F$rgrep=grep-r这里有一些基本的grep命令::x:1001:1001::/home/aaronkilik:Linux下grep、egrep和fgrep的区别?你可以学到更多。4、head命令head用于显示文件的前面部分,默认输出前10行。可以使用-n指定行数来表示:tecmint@TecMint~$head/var/log/auth.logJan210:45:01TecMintCRON[3383]:pam_unix(cron:session):sessionopenedforuserrootby(uid=0)Jan210:45:01TecMintCRON[3383]:pam_unix(cron:session):sessionclosedforuserrootJan210:51:34TecMintsudo:tecmint:TTY=unknown;PWD=/home/tecmint;USER=root;COMMAND=/usr/lib/linuxmint/mintUpdate/checkAPT.pyJan210:51:34TecMintsudo:pam_unix(sudo:session):sessionopenedforuserrootby(uid=0)Jan210:51:39TecMintsudo:pam_unix(sudo:session):sessionclosedforuserrootJan210:55:01TecMintCRON[4099]:pam_unix(cron:session):sessionopenedforuserrootby(uid=0)Jan210:55:01TecMintCRON[4099]:pam_unix(cron:session):sessionclosedforuserrootJan211:05:01TecMintCRON[4138]:pam_unix(cron:session):sessionopenedforuserrootby(uid=0)Jan211:05:01TecMintCRON[4138]:pam_unix(cron:session):sessionclosedforuserrootJan211:09:01TecMintCRON[4146]:pam_unix(cron:session):sessionopenedforuserrootby(uid=0)tecmint@TecMint~$head-n5/var/log/auth.logJan210:45:01TecMintCRON[3383]:pam_unix(cron:session):sessionopenedforuserrootby(uid=0)Jan210:45:01TecMintCRON[3383]:pam_unix(cron:session):sessionclosedforuserrootJan210:51:34TecMintsudo:tecmint:TTY=unknown;PWD=/home/tecmint;USER=root;COMMAND=/usr/lib/linuxmint/mintUpdate/checkAPT.pyJan210:51:34TecMintsudo:pam_unix(sudo:session):sessionopenedforuserrootby(uid=0)Jan210:51:39TecMintsudo:pam_unix(sudo:session)):sessionclosedforuserroot了解如何将head命令与tail和cat命令一起使用,以便在Linux5下更有效地使用它。tail命令tail输出文件的后半部分(默认10行)。使用-n选项指定要显示的行数。以下命令将输出指定文件的最后5行:tecmint@TecMint~$tail-n5/var/log/auth.logJan613:01:27TecMintsshd[1269]:Serverlisteningon0.0.0.0port22.Jan613:01:27TecMintsshd[1269]:Serverlisteningon::port22.Jan613:01:27TecMintsshd[1269]:ReceivedSIGHUP;restarting.Jan613:01:27TecMintsshd[1269]:Serverlisteningon0.0.0.0port22.Jan613:01:27TecMintsshd[1269]::listeningSporterver2一个特殊的选项-f,可以实时查看一个文件(尤其是日志文件)的变化。以下命令将使您能够监视指定文件中的更改:tecmint@TecMint~$tail-f/var/log/auth.logJan612:58:01TecMintsshd[1269]:Serverlisteningon::port22.Jan612:58:11TecMintsshd[1269]:ReceivedSIGHUP;restarting.Jan612:58:12TecMintsshd[1269]:Serverlisteningon0.0.0.0port22.Jan612:58:12TecMintsshd[1269]:Serverlisteningon::port22.Jan613:01:27TecMintsshd[1269]:HUP.61:restarting2Mintsd30[1269]:Serverlisteningon0.0.0.0port22.Jan613:01:27TecMintsshd[1269]:Serverlisteningon::port22.Jan613:01:27TecMintsshd[1269]:ReceivedSIGHUP;restarting.Jan613:02onSevering1:29dMiner[.0.0.0port122:.01:27TecMintsshd[1269]:服务器在::端口22上监听。阅读tail的手册页以获得完整的使用选项和描述:$mantail6,sort命令sort用于转换来自文本文件或标准输入排序的行。以下是名为domain.list的文件的内容:tecmint@TecMint~$catdomains.listtecmint.comtecmint.comnews.tecmint.comnews.tecmint.comlinuxsay.comlinuxsay.comwindowsmint.comwindowsmint.comsortfilecontents:tecmint@TecMint~$sortdomains.listlinuxsay.comlinuxsay.comnews.tecmint.comnews.tecmint.comtecmint.comtecmint.comwindowsmint.comwindowsmint.com您可以通过多种方式使用排序命令,请参考以下关于有用的文章在排序命令上。如何根据修改日期和时间查找和排序文件7.uniq命令uniq命令用于报告或忽略重复行。它过滤来自标准输入的行并将结果写入标准输出。对输入流运行排序后,您可以使用uniq删除重复行,如以下示例所示。要显示一行出现的次数,请使用-c选项,并在比较时忽略大小写差异,请使用-i选项:tecmint@TecMint~$catdomains.listtecmint.comtecmint.comnews.tecmint.comnews.tecmint.comlinuxsay.comlinux说。comwindowsmint.comtecmint@TecMint~$sortdomains.list|uniq-c2linuxsay.com2news.tecmint.com2tecmint.com1windowsmint.com通过阅读uniqman手册获得更多的使用信息和选项:$manuniq8、fmt命令行fmt是一个简单的优化重新格式化指定文件的段落并将结果打印到标准输出的文本格式化程序。以下是从文件domain-list.txt中提取的内容:1.tecmint.com2.news.tecmint.com3.linuxsay.com4.windowsmint.com要将以上内容重新格式化为标准列表,请运行以下命令命令,使用-w选项定义最大行宽:tecmint@TecMint~$catdomain-list.txt1.tecmint.com2.news.tecmint.com3.linuxsay.com4.windowsmint.comtecmint@TecMint~$fmt-w1domain-list.txt1.tecmint.com2.news.tecmint.com3.linuxsay.com4.windowsmint.com9。pr命令pr命令转换文本文件或标准输入并将它们打印出来。例如,在Debian系统上,您可以像这样显示所有已安装的软件包:$dpkg-l要按页和列组织打印列表,请使用以下命令。tecmint@TecMint~$dpkg-l|pr--columns3-l202017-01-0613:19Page1Desired=Unknown/Installiiadduseriiapg|Status=Not/Inst/Conf-iiadwaita-icon-themeiiapp-install-data|/Err?=(无)/Reinst-riiadwaita-icon-theme-iiapparmor||/Nameiialsa-baseiiapt+++-=====================iialsa-utilsiiapt-cloneiiaccountsserviceiianacroniiapt-transport-httpsiiacliiapache2iiapt-utilsiiacpi-supportiiapache2-biniiapt-xapian-indexiiacpidiiapache2-dataiiaptdaemoniiadd-apt-keyiiapache2-utilsiiaptdaemon-data2017-01-0613:19Page2iiaptitudeiiavahi-daemoniibind9-hostiiaptitude-commoniiavahi-utilsiibinfmt-supportiiapturliiaviewiibinutilsiiapturl-commoniibansheeiibisoniiarchdetect-debiibaobabiibltiiaspelliibase-filesiiblueberryiiaspell-eniibase-passwdiibluetoothiiat-spi2-coreiibashiiblueziiattriibash-completioniibluez-cupsiiavahi-autoipdiibciibluez-obexd.....其中使用了以下标志:--column定义要在输出中创建的列数。-l指定页面的长度(默认为66行)。10.tr命令行该命令转换或删除标准输入中的字符,然后将结果输出到标准输出。使用tr的语法如下:$troptionsset1set2看下面的例子,在第一个命令中,set1([:upper:])表示指定输入字符的大小写(全部为大写字符)。set2([:lower:])表示预期结果字符的大小写。第二个例子意思类似,转义符\n表示换行打印输出:tecmint@TecMint~$echo"WWW.TECMINT.COM"|tr[:upper:][:lower:]www.tecmint.comtecmint@TecMint~$echo"news.tecmint.com"|tr[:lower:][:upper:]NEWS.TECMINT.COM11.more命令more命令是一个有用的文件过滤器,最初是为查看证书而构建的。它逐页显示文件内容,用户可以通过回车显示更多信息。tecmint@tecmint?$dmesg|更多[0.000000]initializecgroupsubscpuset[0.000000]initizedizedcgroupsubsyscpu[0.000000]initializingizizingcgroupscpuaccpuaccpuaccpuactionindiredizedizecggroupscpuaccpuactionindiredizecggroupscpuacccpuacct[0.0000],.3.120160413(Ubuntu5.3.1-14ubuntu2))#37-UbuntuSMPMonApr1818:33:37UTC2016(Ubuntu4.4.0-21.37-generic4.4.6)[0.000000]命令行:BOOT_IMAGE=/boot/vmlinuz-4.4.0-21U-genericroot=bb29dda3-bdaa-4b39-86cf-4a6dc9634a1broquietsplashvt.handoff=7[0.000000]KERNELsupportedcpus:[0.000000]IntelGenuineIntel[0.000000]AMDAuthenticAMD[0.000000]CentaurCentaurHauls[0.000000]x86/fpu:xstate_offset[2]:576,xstate_sizes[2]:256[0.0000]x86/fpu:supportingxsavefeature0x01:'x87floatingPointRegisters'[0.000000]x86/fpu:supportingingsingingingxsavefeature0x02:'sseregisters'sseregisters'[0.000000]x86/fpuretsx86/averingxsssevregester''0.00;standard'format.[0.000000]x86/fpu:Using'eager'FPUcontextswitches。[0.000000]E820:BIOS-PROVIDERPHYSICALRAMP:[0.000000]BIOS-E820:[MEM0X0000000000000000000000000000000000000000000000000000000000000000000009D3FF]bios-e820:[0.000000]0.000000]BIOS-E820:[MEM0X000000000000100000-0X00000000A56AFFFF]可用[0.000000]BIOS-E820:[MEM0X000000000000000000000000-0X00000000000000000000A5EA5EA5EAFFFFF]保留与上面的more命令相反,但它提供了额外的功能并且对于大文件来说速度更快按照更多命令命令相同的:tecmint@tecmint?$dmesg|减少[0.000000]初始化cgroupsubsyscpuset[0.000000]初始化(Ubuntu5.3.1-14ubuntu2))#37-UbuntuSMPMonApr1818:33:37UTC2016(Ubuntu4.4.0-21.37-generic4.4.6)[0.000000]命令行:BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-genericroot=UUID=bb29dda3-BDAA-4B39-86CF-4A6DC9634A1BROQUIETSPLASHVT.HANDOFF=7[0.000000]kernelsupportedcpus:[0.000000]IntelgenuineIneIntel[0.000000]AmdauthentICAMD[0.0000]0.0000]x86/fpu:supportingxsavefeature0x01:'x87floatingPointRegisters'[0.000000]x86/fpu:supportinggingxsavefeature0x02:'seregisters'sseregisterss'[0.000000][0.000000]x86/fpu:supportingingingxsaveer'000000000x/xytregtregtrequeat''';format.[0.000000]x86/fpu:Using'eager'FPUcontextswitcHES。[0.000000]E820:BIOS-PROVIDEDPHYSICALRAMP:[0.000000]BIOS-E820:[MEM0X0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009DFF]BIOS-E820:[0.000000][0.000000]BIOS-E820:[MEM0X0000000000100000-0X000000A56AFFFF]可用[0.000000]BIOS-E820:[MEM0X0000000000A56B0000-0X0000000000000000000000A5EA5EA5EA5EAFFFF]保留'less'比'more'命令快仅此而已,如果您知道本文未涵盖的任何其他有用的Linux文本过滤命令行工具,请在下面的评论部分告诉我们。关于作者:AaronKili是Linux和F.O.S.S爱好者,未来的Linux系统管理员,Web开发人员,目前是TecMint的内容创建者,他喜欢使用计算机工作并且坚信知识共享的力量。
