mac 文本处理命令分享

*/-->

pre.src {background-color: #292b2e; color: #b2b2b2;}

pre.src {background-color: #292b2e; color: #b2b2b2;}

pre.src {background-color: #292b2e; color: #b2b2b2;}

pre.src {background-color: #292b2e; color: #b2b2b2;}

mac 文本处理命令分享

1 sed

默认sed命令只是对标准输出做变更,不会影响到源文件,但是如果加了-i之后,会变更源文件。mac中的-i参数使用和linux有差异。后面只对mac的命令做说明。
-i '' i后加上备份文件名称才能影响到源文件。''默认是和原文件名相同,不产生备份文件。 本测试的文件为csophys。其中的内容如下:
cat csophys
I am the first line!
line second is me.

1.1 文本查找替换

sed -i '' 's/line/LINE/' csophys

1.2 文本插入

a在目标行之后插入,i在目标行之前插入。

sed '1 a\
insert
' csophys sed '1 i\
insert
' csophys sed '$line a\
xxxx
' file

$line这是目标行,也可以用正则来定位所有匹配的行。

sed '/line/ i\
insert
' csophys

也可以直接在匹配行之后插入其他文件的内容,比如:

sed '/first/r command.org' csophys

1.3 文本行删除

删除文本中的行

sed '/se.*/d' csophys

1.4 执行sed脚本

cat sed.rule
s/first/FIRST/
s/second/SECOND/
sed -f sed.rule csophys
I am the FIRST line!
line SECOND is me.

更多命令可以参考 man sed。

2 awk

awk '{pattern + action}' {filenames}

awk是在每行处理文本的时候,默认按照空格隔离每一个域,对每一个域做处理。也可以直接通过在awk 后加 -F. 指定分隔符。

 ls -l | awk '/rw/{print "第三列:"$3"\t|\t""第5列:"$5}'

第三列:csophys | 第5列:3154
第三列:csophys | 第5列:42
第三列:csophys | 第5列:5253
第三列:csophys | 第5列:32
第三列:csophys | 第5列:35
ls -l | awk 'BEGIN{OFS="&";count=10;for(i=0;i<3;i++)print"开始"}/rw/{print ++count,NR,$3,$5}END{print "结束"}'
开始
开始
开始
&&csophys&
&&csophys&
&&csophys&
&&csophys&
&&csophys&
&&csophys&
结束

awk中可以使用printf来格式化输出,也可以使用if判断语句

ls -l | awk 'BEGIN{OFS="&";count=10;for(i=0;i<3;i++)print"开始"}/rw/{if(NR>3) printf("printf:%s,%s,%s,%s\n",++count,NR,$3,$5)}END{print "结束"}'
<i++)print"开始"}/rw/{if(NR>) printf("printf:%s,%s,%s,%s\n",++count,NR,$3,$)}END{print "结束"}'
开始
开始
开始
printf:11,4,csophys,42
printf:12,5,csophys,5253
printf:13,6,csophys,32
printf:14,7,csophys,35
结束

awk 内部变量名的含义如下:

变量名    含义
ARGC 命令行变元个数
ARGV 命令行变元数组
FILENAME 当前输入文件名
FNR 当前文件中的记录号
FS 输入域分隔符,默认为一个空格
RS 输入记录分隔符
NF 当前记录里域个数
NR 到目前为止记录数
OFS 输出域分隔符
ORS 输出记录分隔符

更加强大的功能参考 man awk。
或者参考博客:

  1. http://www.zsythink.net/archives/tag/awk/
  2. https://www.tutorialspoint.com/awk/awk_quick_guide.htm

3 sort

sort [-ntkr] 文件名
#-n 采用数字排序
#-t 指定分隔符
#-k 指定第几列
#-r 反向排序

ls -l | awk '/rw/{print $5}' | sort -n -r
ls -l | sort -k  -n -r
-rw-r--r-- csophys staff 11:25 passwd
-rw-r--r-- csophys staff 22:29 command.org
-rw-r--r-- csophys staff 23:14 csophys
-rw-r--r-- csophys staff 11:37 test
-rw-r--r-- csophys staff 22:59 sed.rule
total
ls -l | sort -k  -t ":"
total
-rw-r--r-- csophys staff 23:14 csophys
-rw-r--r-- csophys staff 11:25 passwd
-rw-r--r-- csophys staff 22:31 command.org
-rw-r--r-- csophys staff 11:37 test
-rw-r--r-- csophys staff 22:59 sed.rule

4 uniq

uniq一般需要和sort配合使用。uniq 的作业是删除连续相同的行,所以在sort之后使用效果很好。-c 参数可以打印出重复的次数。

ls -l | awk '/rw/{print $3}'
csophys
csophys
csophys
csophys
csophys ls -l | awk '/rw/{print $3}' | uniq -c
csophys

5 其他

  1. cut。cut可以截取指定分隔符隔开后的具体某一列或者某几列。
  2. tr。tr命令主要作用是在于文本转换或者删除
  3. paste。paste作用是在于按照指定的分隔符按照行进行合并
  4. split。使用split可以实现文件的分割,支持按照行数分割和按照大小分割两种模式。

Author: 陈胜

Created: 2017-09-04 Mon 23:16

Validate

mac 文本处理命令分享的更多相关文章

  1. Mac快捷键与命令学习

    最近开始使用mac air,以前从来没有接触过IOS系统,各种操作捉急.Mac快捷键相当多,遇到各种操作不会就只好百度,然后整理了一堆有用或者没用的命令,一股脑儿列在下面.其中有不少命令是和linux ...

  2. MAC下GitHub命令操作

    由于GitHub实在太有用了~~ ,各种源代码,开源工程,经常需要下载下来使用和学习,或者自己的代码需要上传之类的,尽管有"GitHub for Mac"工具,但是作为一名程序猿! ...

  3. 【Xamarin挖墙脚系列:mac 终端 常用命令+Mac OS X的快捷键+beamoff 】

    原文:[Xamarin挖墙脚系列:mac 终端 常用命令+Mac OS X的快捷键+beamoff ] 基本命令 1.列出文件 ls 参数 目录名        例: 看看驱动目录下有什么:ls /S ...

  4. (转)Linux企业运维人员常用的150个命令分享

    Linux企业运维人员常用的150个命令分享 原文:http://www.jb51.net/article/127014.htm 本文将向大家介绍Linux企业运维人员常用的150个命令,如有不足之处 ...

  5. 编程小技巧之 Linux 文本处理命令

    合格的程序员都善于使用工具,正所谓君子性非异也,善假于物也.合理的利用 Linux 的命令行工具,可以提高我们的工作效率. 本文简单的介绍三个能使用 Linux 文本处理命令的场景,给大家开阔一下思路 ...

  6. Android中实现APP文本内容的分享发送与接收方法简述

    谨记(指定选择器Intent.createChooser()) 开始今天的内容前,先闲聊一下: (1)突然有一天头脑风暴,对很多问题有了新的看法和见解,迫不及待的想要分享给大家,文档已经写好了,我需要 ...

  7. MAC的终端命令

    今天小研究了一下MAC的终端命令,主要为了方便调试程序用,XCODE用不来啊... 在这里记下..防止丢失 pwd 当前工作目录 cd(不加参数) 进root cd(folder) 进入文件夹 cd ...

  8. mac 终端 svn 命令(转)

    mac 终端 svn 命令 1.将文件checkout到本地目录 svn checkout path(path是服务器上的目录)   例如:svn checkout svn://192.168.1.1 ...

  9. mac安装GNU命令行工具

    mac安装GNU命令行工具 2.添加的repo     tap home/dupes        brew install coreutils  binutils  diffutils  ed -- ...

随机推荐

  1. shiro之SimpleAccountRealm

    我使用的是maven构建的工程,junit测试 Shiro认证过程 创建SecurityManager--->主体提交认证--->SecurityManager认证--->Authe ...

  2. mariadb的安装与主从复制

    mariadb其实就是mysql mysql已经被oracle收购,它即将闭源,马上要开始收费了 因此还想免费试用开源的数据库mysql,就在centos7上,将mysql分支为mariadb 第一步 ...

  3. [PKUWC2018]猎人杀

    题解 感觉是一道神题,想不出来 问最后\(1\)号猎人存活的概率 发现根本没法记录状态 每次转移的分母也都不一样 可以考虑这样一件事情: 如果一个人被打中了 那么不急于从所有人中将ta删除,而是给ta ...

  4. 数学/找规律/暴力 Codeforces Round #306 (Div. 2) C. Divisibility by Eight

    题目传送门 /* 数学/暴力:只要一个数的最后三位能被8整除,那么它就是答案:用到sprintf把数字转移成字符读入 */ #include <cstdio> #include <a ...

  5. 暴力/DP Codeforces Beta Round #22 (Div. 2 Only) B. Bargaining Table

    题目传送门 /* 题意:求最大矩形(全0)的面积 暴力/dp:每对一个0查看它左下的最大矩形面积,更新ans 注意:是字符串,没用空格,好事多磨,WA了多少次才发现:( 详细解释:http://www ...

  6. 2、IO流的分类和IO流体系

  7. java 字符串截取的几种方式

    1.split()+正则表达式来进行截取. 将正则传入split().返回的是一个字符串数组类型.不过通过这种方式截取会有很大的性能损耗,因为分析正则非常耗时. String str = " ...

  8. Abp Framework中文文档上线

    感谢 ABP框架中国小组 给我们带来的ABP中文翻译,Web+为方便广大学习爱好者随时查阅,现推出了Gitbook风格的在线阅读文档:http://www.webplus.org.cn/documen ...

  9. $ ssh -T git@github.com ssh: connect to host ssh.github.com port 22: Connection timed out

    在C:/用户/用户名/.ssh中添加几个文件 之前的电脑生成都是四个文件,分别是 id_rsa  id_rsa.pub  config known_hosts 不知道为什么在另一台电脑上却生成两个文件 ...

  10. Python学习 Day 7 面向对象 类和实例 访问限制

    面向对象编程 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程 ...