9.7 sed复习、拓展

复习 
扩展

打印某行到某行之间的内容http://ask.apelearn.com/question/559

sed转换大小写 http://ask.apelearn.com/question/7758

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

删除某行到最后一行 http://ask.apelearn.com/question/213

打印1到100行含某个字符串的行 http://ask.apelearn.com/question/1048

# 六周第四次课(9月7日)
复习 、  扩展

# 打印某行到某行之间的内容  http://ask.apelearn.com/question/559
- 打印文件中特定的某行到某行之间的内容

sed
例如:有个文件test的内容如下:
```
ert
fff
**
[abcfd]
123
324
444
[rty]
**
fgfgf 
```

怎么能截取
```
[abcfd]
123
324
444
[rty]
```

这一部分出来呢?
1.先要在test文件里有这些内容 用vim 打开test文件,把这些内容放进去
```
[[email protected] sed]# vim test
[[email protected] sed]# cat test
ert
fff
**
[abcfd]
123
324
444
[rty]
**
fgfgf 
[[email protected] sed]# 
```
2.现在要把[abcfd]到[rty] 这中间的段位截取出来并且打印到屏幕上

答案: sed -n ‘/\[abcfd\]/,/\[rty\]/p‘ test
```
[[email protected] sed]# sed -n ‘/\[abcfd\]/,/\[rty\]/‘p test
[abcfd]
123
324
444
[rty]
[[email protected] sed]# 
```

#  sed转换大小写 http://ask.apelearn.com/question/7758
- sed 如何转换大小写字母

- sed中,使用\u表示大写,\l表示小写

1. 把每个单词的第一个小写字母变大写:
sed ‘s/\b[a-z]/\u&/g‘ filename

2. 把所有小写变大写:
sed ‘s/[a-z]/\u&/g‘ filename

3. 大写变小写:
sed ‘s/[A-Z]/\l&/g‘ filename

-实验用test文件来做实验
1.把每个单词的第一个小写字母变大写 

-命令解释 :\b边界,放在开头就代表开头  放在结尾就代表结尾 ,在替换字符串中,&代表搜索字符串[RE]所匹配的字符串的值,
-sed中,使用\u表示大写,\l表示小写
```
[[email protected] sed]# cat test
ert
fff
**
[abcfd]
123
324
444
[rty]
**
fgfgf 
[[email protected] sed]# sed ‘s/\b[a-z]/\u&/g‘ test
Ert
Fff
**
[Abcfd]
123
324
444
[Rty]
**
Fgfgf 
[[email protected] sed]# 
```

2. 把所有小写变大写:
sed ‘s/[a-z]/\u&/g‘ test
-命令解释:[a-z]代表所有字母,\u代表大写 
```
[[email protected] sed]# sed ‘s/[a-z]/\u&/g‘ test
ERT
FFF
**
[ABCFD]
123
324
444
[RTY]
**
FGFGF 
[[email protected] sed]# 
```

3. 大写变小写:
sed ‘s/[A-Z]/\l&/g‘ test
-命令解释:[A-Z]代表所有大写字母 \l 代表小写
```
[[email protected] sed]# sed ‘s/[A-Z]/\l&/g‘ test
ert
fff
**
[abcfd]
123
324
444
[rty]
**
fgfgf 
[[email protected] sed]# 
```

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

- sed在文件中某一行最后添加一个数字

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

#cat  test
askdj
aslkd aslkdjf3e
skdjfsdfj
sdkfjk
fsdkfjksdjfkjsdf
12sdfesdf
aslkdjfkasdjf asdlfkjaskdfj

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

askdj 12
aslkd aslkdjf3e  12
skdjfsdfj
sdkfjk
fsdkfjksdjfkjsdf
12sdfesdf
aslkdjfkasdjf asdlfkjaskdfj  12

```

-实验vim test1 把上面文本内容放进test1里面
```
[[email protected] sed]# vim test1
[[email protected] sed]# cat test1
askdj
aslkd aslkdjf3e
skdjfsdfj
sdkfjk
fsdkfjksdjfkjsdf
12sdfesdf
aslkdjfkasdjf asdlfkjaskdfj
[[email protected] sed]# 
```

-在以a字母开头的行添加一个数字12
-命令解释:(^a.*)以a字母开头的行    \1 12  ,\1表示前面的 (^a.*) ,\1 12表示在 (^a.*)里面内容里后面加上12 
```
[[email protected] sed]# sed ‘s/\(^a.*\)/\1 12/‘ test1
askdj 12
aslkd aslkdjf3e 12
skdjfsdfj
sdkfjk
fsdkfjksdjfkjsdf
12sdfesdf
aslkdjfkasdjf asdlfkjaskdfj 12
[[email protected] sed]# 
```

# 删除某行到最后一行 http://ask.apelearn.com/question/213
- sed删除某关键字的下一行到最后一行

[[email protected] ~]# cat test
a
b
c
d
e
f
[[email protected] ~]# sed ‘/c/{p;:a;N;$!ba;d}‘ test
a
b
c

- 解释:定义一个标签a,匹配c,然后N把下一行加到模式空间里,匹配最后一行时,才退出标签循环,然后命令d,把这个模式空间里的内容全部清除。

if 匹配"c"
:a
追加下一行
if 不匹配"$"
goto a
最后退出循环,d命令删除。

- 实验:把之前的test文件内容改变成上面内容一样

```
[[email protected] sed]# vim test
[[email protected] sed]# cat test
a
b
c
d
e
f 
[[email protected] sed]# 
```
- 删除某关键字的下一行到最后一行
```
[[email protected] sed]# sed ‘/c/{p;:a;N;$!ba;d}‘ test
a
b
c
[[email protected] sed]# 
```

-也可以用这个命令sed -r ‘/d/,$d‘ test
-命令解释:sed -r ‘/关键词/,$d‘ test
```
[[email protected] sed]# sed -r ‘/d/,$d‘ test
a
b
c
[[email protected] sed]# 

```
- sed -r ‘/关键词/,$d‘ test  这里的关键词 打印出来的是关键词上面的
```
[[email protected] sed]# sed -r ‘/a/,$d‘ test
[[email protected] sed]# sed -r ‘/b/,$d‘ test
a
[[email protected] sed]# sed -r ‘/c/,$d‘ test
a
b
[[email protected] sed]# sed -r ‘/d/,$d‘ test
a
b
c
[[email protected] sed]# sed -r ‘/e/,$d‘ test
a
b
c
d
[[email protected] sed]# sed -r ‘/f/,$d‘ test
a
b
c
d
e
```
-命令解释:sed -r ‘/关键词/,$d‘ test  全部打印出来,最后一个是f, f后面试最后一个 以#代表
```
[[email protected] sed]# sed -r ‘/#/,$d‘ test
a
b
c
d
e
f 
[[email protected] sed]# 
```

# 打印1到100行含某个字符串的行 http://ask.apelearn.com/question/1048

- 如何使用sed打印1到100行包含某个字符串的行

- 这个需求,其实就是sed指定行范围匹配,较少见。实现:sed  -n ‘1,100{/abc/p}‘  1.txt

- 这个命令也好像可以实现 sed -n ‘1,100p‘ 1.txt|sed -n ‘/abc/‘p
- 命令解释:1到100行 包含“abc”的 给打印出来
- 打印1-6行 含有a字母的行
```
[[email protected] sed]# cat test
a
b
c
d
e
f 

[[email protected] sed]# sed -n ‘1,6{/a/p}‘ test
a
[[email protected] sed]# 
```
- 再编辑下文件test,打印1到6行 中 包含字母a的 行
```
[[email protected] sed]# cat test
a
b
c
da
ea
f 
[[email protected] sed]# 
[[email protected] sed]# sed -n ‘1,6{/a/p}‘ test
a
da
ea
[[email protected] sed]# 
```
时间: 09-07

9.7 sed复习、拓展的相关文章

算法复习——拓展欧几里得(poj1061)

题目: Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置.不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的.但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的.为了帮助这两只乐观的青蛙,你被要求写一个程序来判断这两只青蛙是否能够碰面,会在什么时候碰面. 

SED总结

一.Sed简介 Sed:Stream Editor  流式编辑器 又称行编辑器,每次只编辑一行.Sed工作是在“模式空间”中进行的,并不操作源文件.对源文件无危害. 二.Sed使用格式     Sed命令的常用格式如下: (1)Sed [options] ‘script’ input_file… (2)Sed [options] –f script_file input_file… (3)Sed [options] ‘ADDR1,ADDR2command’ input_file… 例如:#sed

info sed 中文不完全文档

快速指南: sed 的一般使用方法:sed -option 'adress|command' -f scpritfiles(1)'|' 只是用来说明性的分隔 adress 和 command,实际使用中不应该出现.部分选项是可选的,但没有标明.(2)可以使用 -e 选项来在一次 sed 操作中使用多个脚本:例如:sed -e '1a sss' -e '3a dddd' file-name.该命令在第一行和第三行后面添加行.   注意:sed 对于每一行按照从左到右的方法对每一个脚本的触发条件进行

【数学】【数论】拓展中国剩余定理

写在前面 记录了个人的学习过程,同时方便复习 拓展中国剩余定理 [?]中国剩余定理仅仅适用于每个模数两两互质的情况 但是最常见的情况还是所有模数不满足两两互质 这样的话,中国剩余定理就不再适用 需要使用拓展中国剩余定理 中国剩余定理的思路是整体处理 但是当模数不满足两两互素时,就不能处理其中关键的一步: (详见[?]中国剩余定理) 不满足两两互素,即某些模数之间的最大公因数不是1,解出的方程余数不为1 所以拓展中国剩余定理使用的是另一种思路: 逐个处理,直至出现无解情况或者结束! 原文地址:ht

Linux学习笔记7_基本命令复习2(seq sed awk)

命令运用:显示文件的20到30行的内容 ------------------------------------------------- seq 生成序列 seq 100 >[file name]  生成1~100的行序列: 1 2 3 ... 100 注: 上述只限定最大值时,序列从1开始 seq  0  100   则从0开始,序列顺序遵循自然数顺序 seq -1  100   从-1开始: -1 0 1 ...100 -----------------------------------

linux笔记(28)sed和awk的联系及拓展

sed练习题 把/etc/passwd 复制到/root/test.txt,用sed打印所有行 [[email protected] sed]# sed -n '1,$p' passwd 打印test.txt的3到10行 [[email protected] sed]# sed -n '3,10'p passwd 打印test.txt 中包含 'root' 的行 [[email protected] sed]# sed -n '/root/'p passwd 删除test.txt 的15行以及以

Linux学习笔记8_三剑客命令的sed命令复习(替换)

需求:把目录下的所有.sh文件中的内容替换 实现: ls /data a.txt  b.sh  c.sh  d.info 方法1 ----------------------------------------------------------- 先查看替换前内容 find -type f -name "*.sh" |xargs cat before before 测试替换结果,sed无参数时仅打印输出 find -type f -name "*.sh" |xar

9.7 awk复习、拓展

## 1. awk 中使用外部shell变量 http://ask.apelearn.com/question/199 - awk 中使用外部shell变量 变量 shell awk 如: A=44echo "ABCD" | awk -v GET_A=$A '{print GET_A}' 说明:-v选项用于定义参数,这里表示将变量A的值赋予GET_A. 有多少个变量需要赋值,就需要多少个-v选项.与之等价的:应用于脚本中: ``` #! /bin/bash sort -n filena

python拓展1 week1-week5复习回顾

知识内容: 1.python基础概念及基础语法 2.python基础数据类型 3.python模块相关 4.python函数相关 5.python面向对象相关 6.python文件处理相关 一.python基础概念及基础语法 1.python是一门什么样的语言,有何优缺点,有哪些应用领域? 2.python中的变量有何作用,该如何合理地命名? 3.解释一下python的and-or语法 4.python是如何进行内存管理的? 5.python中变量作用域有哪些?如何查看作用域? 6.Python