shell文字过滤程序(十):cut命令

shell文字过滤程序(十):cut命令

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

【版权声明:转载请保留源:blog.csdn.net/gentleliu。Mail:shallnew at 163 dot com】

cut指挥类似至awk,从行内提取的信息,它是一个较弱的版本的功能awk。

cut命令格式为:cut [options] filename

当中options有:

-d  指定与空格和t a b键不同的域分隔符。类似于awk的“-F”。

-f field  指定剪切域数

-c list  指定剪切字符数。

首先我们来处理按:切割的password文件:

# cat passwd
root:x:0:0:root:/root:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
operator:x:37:37:Operator:/var:/bin/sh
ftp:x:83:83:ftp:/home/ftp:/bin/sh
nobody:x:99:99:nobody:/home:/bin/sh
sshd:x:103:99:Operator:/var:/bin/sh

按:切割,然后取第一列和第六列,-f能够指定获取的域数:

# cut -d: -f1,6 passwd
root:/root
proxy:/bin
operator:/var
ftp:/home/ftp
nobody:/home
sshd:/var

指定域数还能够这样写:

# cut -d: -f 1-4,6 passwd
root:x:0:0:/root
proxy:x:13:13:/bin
operator:x:37:37:/var
ftp:x:83:83:/home/ftp
nobody:x:99:99:/home
sshd:x:103:99:/var

awk的实现为:

# awk -F: 'BEGIN{OFS=":"}{print $1,$2,$3,$4,$6}' passwd    
root:x:0:0:/root
proxy:x:13:13:/bin
operator:x:37:37:/var
ftp:x:83:83:/home/ftp
nobody:x:99:99:/home
sshd:x:103:99:/var

可是假设要指定多个字符来切割的话,cut就不行了。cut仅仅支持单个分隔字符,二awk支持多个。

比方我们以“bin”分分隔:

# awk -F"bin" 'BEGIN{OFS=":"}{print $1}' passwd
root:x:0:0:root:/root:/
proxy:x:13:13:proxy:/
operator:x:37:37:Operator:/var:/
ftp:x:83:83:ftp:/home/ftp:/
nobody:x:99:99:nobody:/home:/
sshd:x:103:99:Operator:/var:/

使用cut:

# cut -d"bin" -f1 passwd                                      
cut: the delimiter must be a single character
Try 'cut --help' for more information.

这里能够看见cut命令的功能非常有限。

cut默认以tab键来切割,awk默认以空格或多个空格或tab键来切割:

# sed 's/:/\t/g' passwd | cut -f5
root
proxy
Operator
ftp
nobody
Operator
# sed 's/:/\t/g' passwd | awk '{print $5}'
root
proxy
Operator
ftp
nobody
Operator

cut能够剪切第随意字符。看似功能强大,但非常少有使用价值。

使用- c选项指定精确剪切数目。这样的方法需确切知道開始及结束字符。

通常不用这样的方法,除非在固定长度的域或文件名称上。
来看几个样例即可了:

# cut -c1,2,4 passwd
rot
prx
opr
ft:
noo
ssd
# cut -c5-9 passwd       
:x:0:
y:x:1
ator:
x:83:
dy:x:
:x:10

版权声明:本文博主原创文章。博客,未经同意不得转载。假设你认为你的实际物品,请点击以下“最佳”。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116773.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • git安装教程图文详解_git vim命令

    git安装教程图文详解_git vim命令奥力给一、通过Yum源安装#1.卸载旧版本yumremovegit#2.安装yum源的Git版本yuminstall-ygit#3.查看版本gitversion#输出gitversion1.8.3.1#4.查看本文下方的「三、配置全局环境变量」二、通过编译安装#如果没有安装wget则安装yuminstall-ywget2.1下载点击查看最新版本#我这里操作时最新版本为V2.35.1,以下命.

    2025年8月22日
    4
  • 操作系统概念第三章部分作业题答案

    操作系统概念第三章部分作业题答案题目一:使用下图所示的程序,说明LINEA的输出是什么。为什么?解答:我自己思考的是首先定义了一个名为value的变量,初始值为5,然后进入main程序,首先创建了一个子进程,然后进入if判断,这个时候有两个进程,分别进行判断。对于子进程,会执行value+=15,但由于两个进程共享代码空间,而数据空间是独立的,所以子进程对value的改变不会影响到父进程中的value。子进程执行完毕,…

    2022年7月14日
    18
  • Android Studio IDE Out of Memory

    Android Studio IDE Out of Memory

    2022年1月22日
    52
  • CloseableHttpClient简单使用实例[通俗易懂]

    importjava.io.BufferedReader;importjava.io.IOException;importjava.nio.charset.Charset;importjava.security.KeyManagementException;importjava.security.KeyStoreException;importjava.security.NoSuchAlgorithmException;importjavax.net.ssl.SSLContext

    2022年4月10日
    199
  • pytest之fixture使用详解

    pytest之fixture使用详解简介:fixture区别于unnitest的传统单元测试(setup/teardown)有显著改进:1.有独立的命名,并通过声明它们从测试函数、模块、类或整个项目中的使用来激活。2.按模块化的方

    2022年7月1日
    22
  • CAN协议学习(一)

    CAN协议学习(一)一、CAN协议的特点1)在总线空闲时,所有单元都可以发送消息,两个以上单元同时发送消息时,对各消息的Identifier进行逐位仲裁比较,仲裁获胜的单元(具有较高优先级)可继续发送消息,仲裁失败的单元停止发送。2)消息中没有地址,消息广播到总线上,任何总线上的单元都可以接收消息。在总线上增加单元,不会影响到其它的单元。3)最高数据传输速率1Mbps(距离小于40m),最远传输距离10k…

    2022年6月28日
    31

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号