2013年11月25日shell练习题

回复 收藏
使用sed实现,把一个文本文档中的前5行中包含字母的行删除掉。

参考答案:head -5 1.txt |sed '/[a-Z]/d'


2013-11-25 18:32 举报
已邀请:
0

oszhang

赞同来自:

sed 's/[a-zA-Z]//g '|hand -n5
0

chekir

赞同来自:

都不会了
0

zq13054480665

赞同来自:

不错
0

zq13054480665

赞同来自:

head -n5 passwd | sed '/[a-zA-Z]/d'
0

Wagskun

赞同来自:

学习学习
0

tulip

赞同来自:

sed  -n '/[a-zA-Z]/'p test.txt | sed '1,5'd test.txt
0

larson

赞同来自:

head -n 5 passwd | sed 's#[a-Z]##g'
0

good

赞同来自:

看看
0

路过

赞同来自:

sed '1,5s/[a-zA-Z]//g 1.txt
0

八滴眼泪

赞同来自:

使用sed实现,把一个文本文档中的前5行中包含字母的行删除掉。

head -5 passwd|sed -n '/[a-Z]/d'
0

ocean

赞同来自:

本帖最后由 ocean 于 2014-5-4 16:22 编辑

sed -i '1,5s/^.*[a-z].*$//; 1,5d' passwd
0

轩鹏

赞同来自:

1
0

楓瀛夢鞢

赞同来自:

sed '1,5{/[a-Z]/d}' test.txt
0

齐天大圣

赞同来自:

ddddddddddd
0

黑色的梦

赞同来自:

{:4_91:}
0

木字当头

赞同来自:

0

鸵鸟

赞同来自:

xx
0

Louis

赞同来自:

题目要求的是删除前5行中包含字母的,而不仅仅是删除其中的字母,脚本如下:
#!/bin/bash
## This script is for deleting all the letter lines in a file's head fine lines.
## Writed by Louis on 2014/08/30 23:55

line=`head -5 test.txt|grep -n '[a-Z]'|awk -F ':' '{print $1}'|sort -r`
for i in $line; do
    sed -i "$i"d test.txt
done

假定文本文档为test.txt
运行脚本前文档前6行:
[root@localhost lianxi]# head -6 test.txt|grep -n '.*'
1:root:x:0:0:root:/root:/bin/bash
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:::2:2::/808038-3769-38920961083-=+
5:adm:x:3:4:adm:/var/adm:/sbin/nologin
6:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

运行脚本后:
[root@localhost lianxi]# head -6 test.txt|grep -n '.*'
1::::2:2::/808038-3769-38920961083-=+
2:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
3:sync:x:5:0:sync:/sbin:/bin/sync
4:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
5:halt:x:7:0:halt:/sbin:/sbin/halt
6:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

思路:查找输出符合条件的行号(注意:行号逆序),for循环删除行<在这里,前面的行号逆序就起作用了,因为正序的话,如删除第一行,原文档的第二行,会变成第一行>。
另一小注意点:sed -i "$i"d test.txt,sed语句,要删除(或打印)的行如是变量,用双引号;如仍用单引号,会原封不动输出$i,然后结合d,变成一个变量$id。


0

Louis

赞同来自:

学习了,前面解题没有正确使用正则表达式,想不起可以使用贪婪匹配整行。把问题复杂化了。
0

huifeidexiaxia

赞同来自:

这个不用写脚本吧?
0

nihao426181

赞同来自:

head -n5 1.txt |sed 's/[a-zA-Z]//g'
0

sss

赞同来自:

head -5 pass | sed  's/[a-Z]//g'
0

qqq998492

赞同来自:

head -n 5 /etc/passwd|sed 's/[a-z]//g'
0

Rohero

赞同来自:

学习
0

蓝色风暴

赞同来自:

head -5 /etc/passwd |sed  '/[A-Z]/d'
0

rolay8

赞同来自:

  1. sed '1,5s/[a-zA-z]//g'


0

loveyouhyf

赞同来自:

head -5 111.txt|sed '/[a-Z]/d';sed -n '6,$'p 111.txt
0

lyhabc

赞同来自:

awk 'NR<=5' test.txt|sed  "/[a-zA-Z]/"d
0

zhangzihao

赞同来自:

😐
0

zhangzihao

赞同来自:

看看
0

gxp2008

赞同来自:

参考答案这样写,到简单省事了。但是 d参数。没用过,长见识了。d 删除, 后面不接任何东西
0

kevinjin

赞同来自:

head -5 /etc/passwd |sed 's/[a-zA-Z]//g'
0

kw是id

赞同来自:

sed -n '1,5'p 1.txt |sed '/[a-zA-Z]/'d

0

王斌

赞同来自:

芝麻开门

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: