当前位置: 首页 > 科技观察

Linux下过滤文本和高效文件操作的12个实用命令_0

时间:2023-03-12 01:23:11 科技观察

【.com快译】在这篇文章中,我们介绍了几个在Linux下充当过滤器的命令行工具。过滤器是一个程序,它读取标准输入,对其执行操作,并将结果写入标准输出。过滤器工具以高效的方式处理信息,例如重组输出以生成有用的报告、修改文件中的文本以及处理许多其他系统管理任务。言归正传,这里介绍几种实用的Linux环境下的文件或文本过滤器。1、awk命令awk是一种优秀的模式扫描和处理语言,可以用来在Linux下构建实用的过滤器。如果您从头到尾阅读了我们的Awk系列:第1部分到第13部分(http://www.tecmint.com/category/awk-command/),您就可以开始使用它了。此外,请参阅awk的参考手册页以获取更多信息和使用选项:$manawk2。Sed命令sed是一个功能强大的流编辑器,可用于过滤和转换文本。我们写了两篇介绍sed的有用文章,您可以在这里阅读:《如何使用GNU “sed”命令在Linux下创建、编辑和处理文件》(http://www.tecmint.com/sed-command-to-create-edit-and-manipulate-files-in-linux/)《处理日常Linux系统管理任务的15个实用的“sed”命令技巧和方法》(http://www.tecmint.com/linux-sed-command-tips-tricks/)sed的参考手册页增加了控制选项和操作说明:$mansed3.Grep,Egrep,FgrepandRgrepcommandsthesefiltersto匹配特定模式的输出行。它们从文件或标准输入中读取行,并默认将所有匹配行打印到标准输出。注意:主程序是grep,几个变体与使用特定的grep选项完全相同(它们仍然可用于向后兼容):$egrep=grep-E$fgrep=grep-F$rgrep=grep-r下面是一些基本的grep命令:tecmint@TecMint~$grep"aaronkilik"/etc/passwdaaronkilik:x:1001:1001::/home/aaronkilik:tecmint@TecMint~$cat/etc/passwd|grep"aronkilik"aaronkilik:x:1001:1001::/home/aaronkilik:详情请参考《Linux下Grep、Egrep和Fgrep之间有何区别?》(http://www.tecmint.com/difference-between-grep-egrep-and-fgrep-in-linux/)。4、head命令head用于显示文件的开头部分,默认输出前10行。可以使用-nnumindex,指定行数: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)):sessionclosedforuserroot5.tail命令尾输出文件末尾(默认为最后10行)使用-nnum参数选项字符,可以指定显示的行数。以下命令将输出指定文件的最后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]::Server有a2listeningon特殊选项-f,可用于实时查看文件(尤其是日志文件)的变化。以下命令允许您关注指定文件中的更改:tecmint@TecMint~$tail-f/var/log/auth.logJan612:58:01TecMintsshd[1269]:Serverlisteningon::port22.Jan612:58:11TecMintsshd[1269]:收到SIGHUP;重新启动。Jan612:58:12TecMintsshd[1269]:Serverlisteningon0.0.0.0port22.Jan612:58:12TecMintsshd[1269]:Serverlisteningon::port22.Jan613:01:27TecMintsshd[1269]:ReceivedshM[1269]1:02receivedSIGM1269]:Serverlisteningon0.0.0.0port22.Jan613:01:27TecMintsshd[1269]:Serverlisteningon::port22.Jan613:01:27TecMintsshd[1269]:ReceivedSIGHUP;restarting.Jan613:01:27Tec2listsshd[1269]:ReceivedJan6restarting3SIG:01:27Tec2lists0.0.0port22.Jan613:01:27TecMintsshd[1269]:Serverlisteningon::port22。有关完整的使用选项和操作说明,请参阅tail的参考手册页:$mantail6.sort命令sort用于对文本文件的行或来自标准输入的行进行排序。以下是名为domains.list的文件的内容:tecmint@TecMint~$catdomains.listtecmint.comtecmint.comnews.tecmint.comnews.tecmint.comlinuxsay.comlinuxsay.comwindowsmint.comwindowsmint.com文件内容是这样的:tecmint@TecMint~$sortdomains.listlinuxsay.comlinuxsay.comnews.tecmint.comnews.tecmint.comtecmint.comtecmint.comwindowsmint.comwindowsmint.comsort命令的使用方法有很多,我们写了几个实用的文章介绍排序命令如下:《Linux “sort”命令的14个实用例子-第1部分》(http://www.tecmint.com/sort-command-linux/)《7个有趣的Linux “sort”命令例子-第2部分》(http://www.tecmint.com/linux-sort-command-例子/)《如何基于修改日期和时间来查找和排序文件》(http://www.tecmint.com/find-and-sort-files-modification-date-and-time-in-linux/)http://www.tecmint.com/sort-ls-output-by-last-modified-date-and-time/7.uniq命令uniq命令用于报告或忽略重复行。它可以过滤来自标准输入的行并将结果写入标准输出。在对输入流运行排序后,uniq可用于消除重复行,如以下示例所示。为了表示一行出现的次数,可以使用-c选项忽略大小写差异,加上-i选项进行比较:tecmint@TecMint~$catdomains.listtecmint.comtecmint.comnews.tecmint.comnews.tecmint.comlinuxsay.comlinuxsay.comwindowsmint.comsortdomains.list|uniq-c2linuxsay.com2news.tecmint.com2tecmint.com1windowsmint.com阅读uniq的参考手册页以获取更多使用信息和标志:$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-列表。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/InstallAppg|Status=Not/Inst/Conf- iiadwaita-icon-themeiiapp-install-data|/错误?=(无)/Reinst-riiadwaita-icon-theme-iiapparmor||/名称iialsa-baseiiapt+++-===============iialsa-utilsiiapt-cloneiiaccountsserviceiianacroniiapt-transport-httpsiiacliiapache2iiapt-utilsiiacpi-support iiapache2-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命令是一个实用的文件读取过滤器,主要用于查看创建的证书。它以页面格式显示文件内容,用户可以按回车键查看更多信息。Youcanuseittoviewwiderandlargerfiles,likethis:tecmint@TecMint~$dmesg|more[0.000000]Initializingcgroupsubsyscpuset[0.000000]Initializingcgroupsubsyscpu[0.000000]Initializingcgroupsubsyscpuacct[0.000000]Linuxversion4.4.0(lwil1dder21)(gccversion5.3.120160413(Ubuntu5.3.1-14ubuntu2))#37-UbuntuSMMPMonApr1818: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]intelgenuineintel[0.000000]amdauthentICAMDAMDAUTHENTICAMD[0.000000]CENTAURCENTIALx86/fpu:SupportingXSAVEfeature0x01:'x87floatingpointregisters'[0.000000]x86/fpu:SupportingXSAVEfeature0x02:'SSEregisters'[0.000000]x86/fpu:SupportingXSAVEfeature0x04:'AVXregisters'[0.000000]x86/fpu:Enabledxstatefeatures0x7,contextsizeis832bytes,using'standard'format.[0.000000]x86/fpu:使用'eager'FPUcontextswitches.[0.000000]e820:BIOS-providedphysicalRAMmap:[0.000000]BIOS-e820:[mem0x0000000000000000-0x000000000009d3ff]usable[0.000000]BIOS-e820:[mem0x000000000009d400-0x000000000009ffff]reserved[0.000000]BIOS-e820:[mem0x00000000000e0000-0x00000000000fffff]reserved[0.000000]BIOS-E820:[MEM0X0000000000100000-0X00000000A56AFFFF]可用[0.000000]BIOS-E820:[MEM0X0000000000A56B0000-0X0000000000000000000000A5EA5EA5EAFFFFF]保留目的与上面的more命令正好相反,但是它提供了额外的功能,并且在处理大文件时速度更快更多的更多同样同样方式:tecmint@tecmint?$dmesg|LIST[0.000000]初始化[0.000000]初始化Cgroupsubscppuset[0.000000]初始化Cgroupsubsyscpu[0.000000]初始化CgroupSubsscpuacscpuac@inder@benirerrienlinderrierrierrienlinderrierrierr。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-21-UID=genericrootBB29DDA3-BDAA-4B39-86CF-4A6DC9634A1BROQUIETSPLASPSPLASHVT.HANDOFF=7[0.000000]kernelsupportedcpus:[0.00000000]intelgenuineSipsintelgenuineIns[0.000000]Amdauthentem_22.0000]22.000000000000000000000000000000000000000000000000000000次境内。[0.0000]x86/fpu:supportingxsavefeature0x01:'x87floatingPointRegisters'[0.000000]x86/fpu:supportinggingxsavefeature0x02:'seregisters'sseregisterss'[0.000000][0.000000]x86/fpu:supportingingingsseveremtersx.ertistrectrectrectrectrectrectrectrequentemtrectrequentxytrequentx.feateure0beats/xxlecregtrequertrequertrequertements/xxx04:“'format.[0.000000]x86/fpu:Using'eager'FPUcontextswitches。[0.000000]E820:BIOS-PROVIDERPHYSICALRAMP:[0.000000]BIOS-E820:[MEM0X00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000DAFF]bios-e820:[0.00000000][0.000000]BIOS-E820:[MEM0X000000000000100000-0X00000000A56AFFFF]可用[0.000000]BIOS-E820:[MEM0X0000000000A56B0000-0X000000000000000000000000A5AEA5EA5EAFFFF]保留.tecmint.com/linux-more-command-and-less-command-examples/),您可以了解如何在Linux下实现高效的文件导航。如果还有其他实用的LinuxTools下可以作为文本过滤器的命令行没有在本文中提及,欢迎留言补充。原标题:Linux中有效文件操作过滤文本的12个有用命令,作者:AaronKili