11-14 课堂笔记

1.“^” 表示行的开始, “$” 表示行的结尾,那么空行则可以用 “^$” 表示

 

2.‘.*’ 表示零个或多个任意字符,空行也包含在内。

 

3.# sed 's/^.*$/123&' test.txt,在每一行前面加123

其中^.*$表示匹配每一行

123后的&表示匹配到的字符串也就是^.*$, 所以如果在每一行后面加123则可以写成# sed 's/^.*$/&123/' test.txt

 

4.打印文件中特定的某行到某行之间的内容

例如在/etc/passwd 文件中,想要打印从sync到ftp的行,就可以写成

sed -n '/sync/,/ftp/'p /etc/passwd

5.用sed替换大小写

\b

匹配一个单词的边界,也就是指单词和空格间的位置(即正则表达式的“匹配”有两种概念,一种是匹配字符,一种是匹配位置,这里的\b就是匹配位置的)。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”;“\b1_”可以匹配“1_23”中的“1_”,但不能匹配“21_3”中的“1_”。

 

把每个单词的第一个小写字母变大写:(sed中,使用\u表示大写,\l表示小写,&表示匹配到的字符串也就是\b[a-z]

sed 's/\b[a-z]/\u&/g' filename

把所有小写变大写:

sed 's/[a-z]/\u&/g' filename

 

把第一个单词的大写字母变小写:

sed 's/[A-Z]/\l&/g' filename

 

 

6.sed在某一行最后添加一个数字http://ask.apelearn.com/question/288

sed 's/\(^a.*\)/\1 12/' test

sed -r 's/(^a.*)/& 12/' test

在这里&和\1的作用相同

 

7.替换每一行第几个字母或数字

# sed 's/w1/w2/n1' filename, 这里w1就表示被替换的字母或数字,w2表示被替换成的字母或数字,n1表示第几个

如下图,把每行的第二个s替换成S, sed 's/s/S/2' test.2.txt

 

我们可以看到每行的第二个小写的s替换成了S

  • n1g可以表示第几个以后的

例如只替换第二个以后的s为S,就可以写成

# sed 's/s/S/2g' test.2.txt

 

8.sed 中除了用-e来表示多个匹配,也可以用;做多个匹配的分隔

 

9.sed中N的用法

当使用了N之后sed会把当前行和下一行的内容先并列在一起然后在进行匹配

注意N和p为同级选项,要用{N;p}来进行并列,可以写成 sed -n '/keywords/ {N;p}' filename

 

10.sed 中a命令就是append, i命令就是insert,它们是用来添加行的

 

语法 # sed '行数 i 添加的内容' filename - 表示在第几行之前添加……内容

语法# sed '行数 a 添加的内容' filename- 表示在第几行之后添加……内容

也可以在匹配的内容的行之前或之后添加内容-语法# sed '/keyword/ i or a 添加的内容' filename

 

11.sed - 打印1到100行含某个字符串的行

语法 sed -n '1,100 {/keyword/p}' filename

 

12.awk 中使用外部shell变量,这种用法经常使用,需要掌握

例如我们定义a=3, 那么我们想用awk来打印文件的第三段,其实可以用awk -F ":" '{print $3}' filename, 如果我们想要引用变量应该加参数-v来把变量传到到awk工具中,所以要写成# awk -F ":" -v b=$a '{print $b}' test.2.txt

如下图所示

 

13.awk 合并一个文件

  • NR 与FNR的区别

如图所示当两个文件合并时, NR会显示出所有的行数一次排序,而FNR则会列出读取的当前行数

 

  • awk 'NR==FNR{a[$1]=$2}NR>FNR{print $0,a[$1]}'  1.txt  2.txt

 

有这样的需求,需要把两个文件中,第一列相同的行合并到同一行中。举个例子,有两个文件,内容如下

cat 1.txt

1 aa

2 bb

3 ee

4 ss

 

cat 2.txt

1 ab

2 cd

3 ad

4 bd

5 de

 

合并后的结果为:

 

1 ab aa

2 cd bb

3 ad ee

4 bd ss

5 de

 

 

 

14.把一个文件多行连接成一行

方法一:

a=`cat file`;echo $a

方法二:

awk '{printf("%s ",$0)}' file

方法三:

cat file |xargs

我们可以用sed把空格变成,号,cat 1.txt |xargs |sed 's/ /,/g'

  • 我们想要相加某一段的数值除了awk的tot循环,也可以先变成一列,然后把空格变成+号,然后再用bc,就可以得出结果了 www.runoob.com/linux/linux-comm-bc.html

awk -F ":" '{pring $n1}' filename |xargs |sed 's/ /+/g' |bc

在把空格都变成+号之后,输入 python,之后直接粘贴带+号的那一列,按回车也可得到结果

 

15.awk中gsub函数的使用 

awk 'gsub(/www/,"abc")' /etc/passwd  // passwd文件中把所有www替换为abc

awk -F ':' 'gsub(/www/,"abc",$1) {print $0}' /etc/passwd  // 替换$1中的www为abc

 

 

16.用awk生成以下结构文件 

awk 'BEGIN{for(i=1;i<=100;i++)printf("%d,%d,%010d,%010d,%010d,%010d,%010d,%010d,%d\n",i,i,i,i,i,i,i,i,strftime("%Y%m%d%H%M%S"))}'

for循环使用在begin中

 

17.awk用print打印单引号 

awk 'BEGIN{print "a'"'"'s"}'

awk 'BEGIN{print "a'\''s"}'

awk 'BEGIN{print "a\"s"}'

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值