Linux命令允许您从文件或数据流中提取部分文本它对于处理分隔数据特别有用这是你需要知道的
cut
剪切命令
该命令是Unix世界的老手,于 1982 年作为 ATamp,T System III UNIX 的一部分首次亮相它在生活中的目的是根据您设置的标准从文件或流中截取部分文本它的语法和它的用途一样简单,但正是这种联合的简单性使它如此有用
cut
有关的Linux和BSD有什么区别。
以历史悠久的 UNIX 方式,通过与其他实用程序相结合,您可以为具有挑战性的问题创建优雅而强大的解决方案虽然有不同的版本,但我们将讨论标准的 GNU/Linux 版本请注意,其他版本,特别是BSD变体中的版本,不包括此处描述的所有选项
cut
grep
cut
cut
您可以通过发出以下命令来检查计算机上安装了哪个版本:
剪切——版本
如果您在输出中看到GNU coreutils,那么您使用的是我们将在本文中描述的版本所有版本都具有此功能,但 Linux 版本已添加了增强功能
cut
切割的第一步
无论我们是将信息输入还是用于读取文件,我们使用的命令都是相同的您可以对输入流执行的任何操作都可以在文件中的一行文本上执行, 反之亦然我们可以告诉我们使用字节,字符或分隔字段
cut
cut
cut
cut
要选择单个字节,我们使用 选项并告诉我们想要哪个或哪些字节在这种情况下,它是字节 5
—b
cut
cut
echo
echo 'how—to 极客'
该字符串中的第五个字节是t,因此通过在终端窗口中打印t来响应。
cut
要指定 范围 ,我们使用连字符。要提取字节 5 到 — 包括 — 11,我们将发出以下命令:
echo 'how—to 极客'
您可以通过用逗号分隔它们来提供多个单个字节或范围。。要提取字节 5 和字节 11,请使用以下命令:
echo 'how—to 极客'
要获取每个单词的第一个字母,我们可以使用以下命令:
echo 'how—to 极客'
如果您使用没有 第一个 数字的连字符,则返回从位置 1 到数字的所有内容如果您使用没有 第二个 数字的连字符,则返回从第一个数字到流或行末尾的所有内容
cut
cut
echo 'how—to 极客'
echo 'how—to 极客'
对字符使用 cut
使用字符与使用字节几乎相同在这两种情况下,必须特别注意复杂的字符通过使用 选项,我们告诉以字符而不是字节工作
cut
—c
cut
echo 'how—to 极客'
echo 'how—to 极客'
这些工作完全符合您的预期但是看看这个例子这是一个六个字母的单词,因此要求返回从 1 到 6 的字符应该返回整个单词但事实并非如此少了一个字要查看整个单词,我们必须询问从 1 到 7 的字符
cut
剪切—c 1—6
剪切—c 1—7
问题是字符实际上是由两个字节组成的我们可以很容易地看到这一点
猫 unicode.txt
我们将使用该实用程序检查该文件使用 选项为我们提供了一个十六进制数字表,右边是对应的 ASCII 在 ASCII 表中,没有显示,而是有代表两个不可打印字符的点这些是十六进制表中突出显示的字节
hexdump
—C
hexdump —C unicode.txt
显示程序使用这两个字节来识别许多Unicode 字符使用三个或更多字节来表示单个字符
如果我们要求输入字符 3 或字符 4,则会显示非打印字符的符号如果我们要求字节 3和4,shell 会将它们解释为
回声皮纳塔
回声皮纳塔
剪切—c 3—4
使用带有分隔数据的 cut
我们可以要求使用指定的分隔符分割文本行默认情况下,cut 使用制表符,但很容易告诉它使用我们想要的任何内容/etc/passwd文件中的字段由冒号:分隔,因此我们将使用它作为分隔符并提取一些文本
cut
分隔符之间的文本部分称为 fields,并且像字节或字符一样被引用,但它们前面有 选项您可以在f和数字之间留一个空格,也可以不留
—f
第一个命令使用 选项告诉 cut 使用:作为分隔符它将从/etc/passwd文件的每一行中提取第一个字段这将是一个很长的列表,因此我们使用 选项仅显示前五个响应第二个命令做同样的事情,但用于向我们显示最后五个响应
head
—n
tail
剪切 —d':' —f1 /etc/passwd
剪切 —d':' —f2 /etc/passwd
要提取选定的字段,请将它们列为逗号分隔的列表此命令将提取字段一到三,五和六
剪切 —d':' —f1—3,5,6 /etc/passwd
通过包含在命令中,我们可以查找包含/bin/bash的行这意味着我们只能列出那些将 Bash 作为其默认 shell 的条目这通常是普通用户帐户我们将要求从 1 到 6 的字段,因为第七个字段是默认的 shell 字段,我们已经知道它是什么——我们正在搜索它
grep
grep "/bin/bash" /etc/passwd
包含除一个之外的所有字段的另一种方法是使用该选项这会反转字段选择并显示尚未请求的所有 内容 让我们重复最后一个命令,但只要求输入字段 7然后我们将使用该选项再次运行该命令
——complement
——complement
grep "/bin/bash" /etc/passwd
grep "/bin/bash" /etc/passwd
第一个命令找到一个条目列表,但字段 7 没有给我们任何东西来区分它们,所以我们不知道这些条目指的是谁在第二个命令中,通过添加选项,我们得到除了字段 7 之外的所有内容
——complement
管道切割成切割
继续使用/etc/passwd文件,让我们提取字段 5这是拥有用户帐户的用户的实际名称
grep "/bin/bash" /etc/passwd
第五个字段具有以逗号分隔的子字段它们很少填充,因此它们显示为一行逗号
我们可以通过将前一个命令的输出传递到另一个调用来删除逗号第二个实例 使用逗号,作为其分隔符 选项告诉抑制根本没有分隔符的结果
cut
cut
—s
cut
剪切 —d',' —s —f1
因为根条目在第五个字段中没有逗号子字段,所以它被抑制了,我们得到了我们想要的结果——在这台计算机上配置的真实用户的名称列表。一是在线安装。
输出分隔符
我们有一个小文件,其中包含一些逗号分隔值。此虚拟数据中的字段是:
小猫.csv
如果我们告诉 cut 使用逗号作为分隔符,我们可以像以前一样提取字段有时您需要从文件中提取数据,但您不希望在结果中包含字段分隔符使用 ,我们可以告诉 cut 使用什么字符——或者实际上是字符 序列——来代替实际的分隔符
——output—delimiter
剪切 —d ',' —f 2,3 small.csv
cut —d ',' —f 2,3 small.csv ——output—delimiter=' '
第二个命令告诉用空格替换逗号。
cut
我们可以更进一步,并使用此功能将输出转换为垂直列表此命令使用换行符作为输出分隔符请注意,我们需要包含$以使换行符起作用,而不是解释为两个字符的文字序列
我们将使用过滤掉 Morgana Renwick 的条目,并要求打印从字段 2 到记录末尾的所有字段,并使用换行符作为输出分隔符。用户可以像使用移动终端“应用市场”一样,通过麟卓应用商城搜索所需要的应用后在线安装。
grep
cut
剪切 —d ',' —f2— ——output—delimiter=$''
老歌但戈尔迪
在撰写本文时,little cut命令即将迎来它的 40 岁生日,而我们今天仍在使用它并写下它我想今天的删减文本和 40 年前一样也就是说,当您手头有正确的工具时,会容易得多
。声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多企业信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。投资有风险,需谨慎。