linux 文本的行、列操作

背景

在工作中经常会碰到,对文本的列、行的操作,主要涉及操作为sed和awk。本文记录哈常见的场景,以便不时之需。

常用特殊字符

  • $ 正则表达式中表示一行结尾,常用在(grep、sed、awk、vim中);或用在变量的前导符
  • ^ 表示一行开始
  • $? 状态值(0,1)

对行的操作

主要使用sed命令进行操作,-i 参数表示将使用新的内容对源文件进行修改

在某行的前一行或后一行添加内容

即不知道在第几行操作,只给出了某行的内容。

在某行前插入一行:sed -i '/xxx/i\yyy' filename。i表示插入,即在名称为filename的文件中,内容为xxx的行前插入内容为yyy的行
在某行后追加一行: sed -i '/xxx/a\yyy' filename。 a表示追加,即在名称为filename的文件中,内容为xxx的行后追加内容为yyy的行

比如test文件内容为:

[root@control ~]# cat test
aaa
bbb
ccc
ddd
ccc

我们在test文本中,行内容为ddd前插入一行555:

[root@control ~]# sed '/ddd/i\555' test 
aaa
bbb
ccc
555
ddd
ccc

由于我们使用sed时,没有使用-i参数,所以修改后的内容并不会添加到test文件中。要想修改test文件则添加i参数。同理

在某行前或后加一行内容

即在知道行号的前提下,进行操作

操作:sed -i 'N;Miyyy' filename N表示对行操作,M表示行号,i表示动作即在文件名为filename的M行前插内容为yyy的一行
sed -i 'N;Mayyy' filename 同上,不过a表示追加。

同样对test进行操作:

[root@control ~]# sed 'N;4ai666' test 
aaa
bbb
ccc
ddd
i666
ccc
统计行数

可使用wc命令

// 参数-l 表示行 -w表示words
[root@control ~]# wc -l test
5

或使用NR和tail

// tail -nk 表示输出最后k行
// print NR 打印出行的标号,1,2,3,4,5.
[root@control ~]# awk '{print NR}' test | tail -n1
5

对列的操作

方法:对列的操作主要使用awk去获取某一列,然后进行拼接来完成对某一列的删除、增加。 使用awk时,NR代表行

提取某列

操作:awk '{print $i}' $i代表某列,当然可在其中添加if判断语句

比如,test内容为:

[root@control ~]# cat test 
aaa dss uuu
bbb fds iii
ccc xxx lll
ddd 222 ttt
ccc 333 yyy

现在获取第二列

[root@control ~]# awk '{print $2}' test
dss
fds
xxx
222
333
添加列

操作: 简单方法,使用print进行拼接

给test的第一列添加内容为uuu的一列,每列以空格间隔。

awk '{print "uuu " $1" " $2" " $3}' test
uuu aaa dss uuu
uuu bbb fds iii
uuu ccc xxx lll
uuu ddd 222 ttt
uuu ccc 333 yyy
取出test的前两行

NR表示行,使用if条件判断

[root@control ~]# awk '{if(NR <= 2){print}}' test
aaa dss uuu
bbb fds iii

参考

https://www.cnblogs.com/dirt2/p/5991033.html
http://www.361way.com/sed-process-lines/2263.html
https://www.cnblogs.com/tdtdttdd/p/6901757.html
https://www.cnblogs.com/mikasama/p/8032389.html

  • 8
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值