当前位置: 首页 > Linux

Linux字符截取命令-cut

时间:2023-04-06 02:09:27 Linux

Linux字符截取命令-cut作者|WenasWei-linuxcut命令详解将每个文件中选中的行部分打印到标准输出,如果没有文件,或者文件是-,则阅读Takingstandardinput,mandatoryargumentsforlongoptionsalsomandatoryforshort选项。cut是一个选择命令。一般来说,选择信息通常是针对“线”进行分析,而不是对整个信息进行分析。它用于显示从每行开头开始计算的从num1到num2的文本。1.1使用语法cut[-bn][file]cut[-c][file]cut[-df][file]1.2说明cut命令从文件的每一行中剪切字节、字符和字段,以及,字符,和字段被写入标准输出。如果未指定File参数,则cut命令读取标准输入。必须指定-b、-c或-f标志之一,默认使用制表符作为分隔符。参数:-b:以字节为单位拆分。这些字节位置忽略多字节字符边界,除非还指定了-n标志。-c:以字符为单位分割。-d:自定义分隔符,默认为制表符。-f:与-d一起使用以指定要显示的区域。-n:未拆分的多字节字符。仅与-b标志一起使用。如果字符的最后一个字节落在-b标志的List参数指示的范围内,则该字符将被写入;否则,该字符将被排除在-b、-c或-f之外,只能使用一个。每个LIST由一个范围或多个以逗号分隔的范围组成。所选输入的写入顺序与读取和写入的顺序相同。1.3三种定位方式cut命令主要接受三种定位方式:第一,bytes(字节),使用option-b第二,characters(字符),使用option-c第三,domain(域),使用option-f两种cuthelp文档执行命令查询帮助文档:cut--helpcut帮助文档解析:(1)'-bbytelist''--bytes=bytelist'选择只打印字节列表bytes中列出的位置。制表符和退格键与任何其他字符一样;它们占用1个字节。如果指定了输出定界符,则字符串将在所选字节范围之间输出。(2)'-cchar-list''--characters=char-list'选择只打印character-list中所列位置的字符。目前与-b相同,但国际化将改变它。制表符和退格键与任何其他字符一样;他们占用1个字符。如果指定了输出定界符,则字符串将在所选字节范围之间输出。(3)'-dinput_delim_byte''--delimiter=input_delim_byte'和-F,请使用input_delim_byte的第一个字节作为输入字段的分隔符(默认为TAB)。(4)'-ffield-list''--fields=field-list'选项只打印field-list中列出的字段。默认情况下,字段由TAB字符分隔。还打印任何不包含定界符的行,除非指定了--delimit-only(-s)选项。(5)'-n'不分割多字节字符。(6)'-s''-delimitedonly'对于-F,不打印不包含字段分隔符的行。通常,任何没有字段分隔符的行都按原样打印。三个命令详解及用例3.1示例1:query命令结合cut-b执行who命令时,会输出类似如下内容:$whorootpts/12021-04-2521:51(58.62.93.183)rootpts/02021-04-2521:50(58.62.93.183)(1)提取每行的第3个字节$who|cut-b3oo(2)提取第1、2、3字节方案1:$who|cut-b1-3roorooroo方案二:$who|cut-b1,2,3roorooroo-b支持1-3的形式写法,多个位置可以用逗号隔开。注意:如果cut命令使用了-b选项,那么在执行该命令时,cut会先将-b之后的所有位置从小到大排序,然后提取。定位顺序不能颠倒。(3)提取who|cut-b1-3,20-roo2021-04-2521:51(58.62.93.183)roo2021-04-2521:50第1到3、5、20个字符之后的所有数据(58.62.93.183)roo2021-04-2523:05(58.62.93.183)(4)提取第n个字节前后的所有字节n=2方案一:$who|cut-b2-ootpts/12021-04-2521:51(58.62.93.183)ootpts/02021-04-2521:50(58.62.93.183)ootpts/22021-04-2523:05(58.62.93.183)方案二:$who|cut-b-2rororo3.2示例二:通过cut-c结合文本文件创建测试文件(1)创建测试文件:test.txtvitest.txttest文件内容数据apple=apple=pingguocreate=createdelect=deleteexe=programgood=good(2)-c和-b的使用区别-c和命令查询结果:who|cut-c1-3,20-roo2021-04-2521:51(58.62.93.183)roo2021-04-2521:50(58.62.93.183)roo2021-04-2523:05(58.62.93.183)看来查询结果是一样的,只是因为这个例子谁输出取的数据都是字节字符,所以用-b和-c没有区别。如果你提取中文,就会看到差异。看一下中文提取的情况:$cut-b3-10test.txtple=苍eatate=createlect=deletee=programod=good$cut-c3-10test.txtple=appleeat=createlect=deletee=programod=ok原来是哪个版本修复了这个问题,附上测试用的linux版本,其他命令和-b类似,下面不再一一列举。$cat/proc/versionLinux版本4.15.0-52-generic(buildd@lgw01-amd64-051)(gcc版本7.3.0(Ubuntu7.3.0-16ubuntu3))#56-UbuntuSMPTueJun422:49:08UTC20193.3示例3:Cut-d和-f一起使用。cut的-d选项默认的间隔符是制表符,所以当你只想使用制表符时,完全可以省略-d选项,而使用-f取域即可。(1)结合查询命令提取指定符号切出的第一个域$head-n5/etc/passwdroot:x:0:0:root:/root:/bin/bashdaemon:x:1:1:守护进程:/usr/sbin:/usr/sbin/nologinbin:x:2:2:bin:/bin:/usr/sbin/nologinsys:x:3:3:sys:/dev:/usr/sbin/nologinsync:x:4:65534:sync:/bin:/bin/sync$head-n5/etc/passwd|cut-d':'-f1rootdaemonbinsyssync(2)取出文件中切割指定符号的第一个字段$head-n5test.txt|cut-d:-f1apple=apple=pingguocreate=createdelect=deleteexe=programgood=ok$head-n5test.txt|cut-d=-f2apple创建删除程序good(3)上面-b中的拼接规则类似使用$head-n5test.txt|cut-d=-f2-$head-n5test.txt|cut-d=-f2,3$head-n5test.txt|cut-d=-f2-3(4)分隔符必须是单个字符,多个例外如下$cattest.txt|cut-d'=='-f2-3cut:分隔符必须是单个字符4使用场景及不足之处4.1剪切使用场景剪切命令用于显示行的指定部分,删除文件中的指定字段,脚本剪切读取文件或指定命令信息统计指定服务器信息处理,归纳统计4.2cut缺陷与不足不能处理多个空格如果文件中有些字段被几个空格隔开,那么使用cut有点麻烦,因为cut只擅长处理文本内容"以一个字符间隔"4.3cut与awk的区别在于,当文件中的每一行都包含一个或多个空格时,此时只能使用awk来分隔它们。cut默认的分隔符是制表符,awk默认的分隔符是一个空格或者多个空格或者制表符参考文档:[1]东方雨中的行者。博客园:https://www.cnblogs.com/dong0...,2011-12-09.[2]GNU操作系统:http://www.gnu.org/software/c...