SED练习

日志

SED练习

德英    发表于2010年03月15日 18:04 阅读(0) 评论( 0) 分类: 学习笔记
举报举报

SED练习
1.删除文件每行的第一个字符
sed 's/^.//' /etc/passwd
2.删除文件每行的第二个字符
sed -r 's/'^( . ) .//1/' /etc/passwd
3.删除文件每行的最后一个字符
sed 's/.$//' /etc/passwd
4.删除文件每行的倒数第二个字符
sed 's/. ( .)$//1/' /etc/passwd
5.删除文件每行的第二个单词
sed -r 's/^( [a-Z]+[^a-Z]+)[a-Z]+//1/' /etc/passwd
6.删除文件每行的倒数第二个单词
sed -r 's/[a-Z]+([^a-Z]+[a-Z]+)$//1/' /etc/passwd
7.删除文件每行的最后一个单词
sed -r -e's/[a-Z]+$//' -e's/[a-Z]+(:)//1/'/etc/passwd
8.交换每行的第一个字符和第二个字符
sed -r 's/'^( . ) ( . )//2/1/' /etc/passwd
9.交换没行的第一个字符和第二个单词
sed -r 's/^( .)( [a-z]+[^a-Z]+)( [a-Z]+)//3/2/1/'/etc/passwd 非数字帐户
10 交换没行的第一个单词和最后一个单词
sed -r 's/^( [a-Z]+)( [^a-z].*[^a-Z]) ([a-z]+)$//3/2/1/' /etc/passwd 非数字帐户
11 删除一个文件中所有的数字
sed -r 's/[0-9]//g' /etc/passwd
12 删除每行开头的所有空格
sed -r 's/^[ ]//g' /etc/passwd
13 用制表符替换文件中出现的所有空格
sed -r 's/[ ]+//t/g' /etc/passwd
14 把所有大写字母用()括起来
sed -r 's/( [A-Z])/(/1)/g' /etc/passwd
15 打印每行三次
sed '{p;p; } ' /etc /passwd
16 隔行删除
sed -n '1~2p' /etc/passwd
17 把文件从第22 行到第33 行复制到第56 行后面
sed -e'22h' -e'23,33H' -e'56G' /etc/passwd
18 把文件从第22 行到第33 行移动到第56 行后面
sed -e'22h' -e'23,33H' -e'56G' -e '22,33d' /etc/passwd
19 只显示每行的第一个单词
sed -r 's/^( [a-Z]+)[^a-z] .*//1/' /etc/passwd 非数字用户
20 打印每行的第一个单词和第三个单词
sed -r 's/^( [a-Z]+)[^a-Z]+[a-Z]+[^a-Z]+([a-Z]+)[^a-Z] .*//1 /2/'/etc/passwd
21 将格式为 mm/yy/dd 的日期格式改为 mm;yy;ddsed
-r's@/@;@g' /etc/passwd
AWK练习
1. 功能是打印所有输入行
awk '{print $0} ' f ilename
2. 打印输入文件第八行
awk 'NR==8{print $0} ' f ilename
3. 用awk打印文件所有行的第一个字段
awk -F:'{print $1} ' f ilename
4. 打印输入行总数
awk 'BEGIN{num=0;} {num++;}END{print num} ' f ilename
awk 'END{print NR}' f ilename
5. 打印每行字段数
awk -F: '{print NF,$0} ' f ilename
6. 打印最后一行的最后一个字段的值
Awk -F: 'END{print $NF} ' filename
7. 打印字段数大于等于4个的行
Awk -F: ‘NF>=4{print $0} ’ f ilename
8. 打印文件所有字段的总数
Awk -F: 'BEGIN{count=0}{count=count+NF:}{print count} ' f ilename
9. 打印UID在 30-40范围内的用户名
Awk -F: '$>=30&&S3<=40{print $1}' f ilename
10.倒叙排列文件的所有字段
awk -f : '{for( i=NF;i>0:i--) }{ if ( i!=1} {printf "%s: " ,$i};}else{printf ("%s/n" ,$i) ; }
#!/bin/awk -f
BEGIN{
F=": "
}
{
for( i=NF;i>0;i--)
{
if( i!=1)

printf ("%s: " ,$i)

Else
{
printf ("%s/n",$i)
}
}
}
11.打印5 到26 行
Awk -F: 'NR>=5&&NR<=26{print} ' f ilename12.在文件顶部加上标题“Document“
Awk 'BENGIN{print“Document}{print} 'f ilename
13.隔行删除
Awk '{ if (NR%2==1) {print } }' f ilename
14.打印字段数大于5的行的总数
Awk -F: 'BEGIN{num=0; } { if(NF>=5) {num++;}} END {print num;}' f ilename
15.编写一个 awk脚本,统计/dev中各类型文件数量
#!/bin/awk -f
BEGIN{
ff=0
dd=0
bb=0
cc=0
pp=0
ss=0
ll=0
}
{
if($0 ~/^-/)

ff++

if($0 ~/^p/)

pp++

if($0 ~/^b/)

bb++

if($0 ~/^/)

cc++

if($0 ~/^d/)

dd++

if($0 ~/^l/)

ll++

if($0 ~/^s/)
{s++

}
END{
Print "f ile: ", f f
Print "directory: " ,dd
print" character: ",cc
print" block: " ,bb
print" link: " ,ll
print" sockt : ",ss
print" pipe: " ,pp
}
16.编写一个 awk脚本,读取IP来自一个文件,并且测试该IP地址
#!/bin/awk -f
{
if(system("ping-c 1 " $0">/dev/null)==0)
{
Print $0 YES
}
else
{
Print $0 NO
}
}
17.编写一个 awk脚本,读取文件添加用户
#!/bin/awk -f
{
If (system("useradd" $0 2>/dev/null) ==0)
{
Print "user: " $0"add"
}
else
{
Print "user"$0"error"
}
}
18.编写一个 awk脚本,功能过滤出合法IP地址
#!/bin/awk -f
BEGIN{
FS=" : "
}
{
if( 1>0&&$1<255&&$2>=0&&$2<=255$3>=0&&$3<=255$4>=0&&$4<=255{
Print $0
}
}
19.编写一个 awk脚本,功能是每行抽取第一个单词
#!/bin/awk -f
BEGIN{
FS=" [^a-Z]+"
}
{ f irst=0
f lag=0
for( i=1;i<=NF;i++)
{
If ($I !=NULL}

if(f lag==0)
{
f irst=I
f lag=1
}

}
Print $f irst
}
20.编写一个 awk脚本,功能是打印每行的第一个和最后一个单词
#!/bin/awk -f
BEGIN{
FS=" [^a-Z]+"
}
{ f irst=0
f lag=0
last=0
for( i=1;i<=NF;i++)
{
If ($I !=NULL}

last=i
if(f lag==0)
{
f irst=I
f lag=1
}}
}
Print $f irst " " $last
}

### 回答1: 1. 使用awk命令,将一个文件中的第一列和第二列相加,并输出结果。 2. 使用sed命令,将一个文件中的所有空行删除,并输出结果。 3. 使用grep命令,查找一个文件中包含特定字符串的行,并输出结果。 4. 使用awk命令,将一个文件中的所有行按照第二列进行排序,并输出结果。 5. 使用sed命令,将一个文件中的所有单词转换为大写,并输出结果。 6. 使用grep命令,查找一个文件中不包含特定字符串的行,并输出结果。 7. 使用awk命令,将一个文件中的所有行按照第一列进行分组,并输出结果。 8. 使用sed命令,将一个文件中的所有行反转,并输出结果。 9. 使用grep命令,查找一个文件中包含特定字符串的行数,并输出结果。 10. 使用awk命令,将一个文件中的所有行按照第三列进行筛选,并输出结果。 ### 回答2: awksed和grep是Linux系统中常见的文本处理工具,它们可以对文本进行搜索、替换、过滤、格式化等操作。以下是一些常见的练习题,可以帮助读者加深对这些工具的理解和掌握它们的使用技巧。 1. 使用awk命令统计日志文件中每个IP的访问次数。 awk '{a[$1]++} END {for(i in a) print i, a[i]}' logfile 其中,a[$1]++用于统计IP的访问次数,END子句用于在处理完整个文件后输出结果。 2. 使用sed命令批量重命名文件夹中所有的.jpg文件为.png。 sed -i 's/\.jpg/\.png/g' $(find /path/to/folder -type f -name '*.jpg') 其中,-i选项表示直接修改原文件,使用find命令来查找所有.jpg文件,并将其替换为.png。 3. 使用grep命令查找一个目录下所有包含“Linux”关键字的文件,并输出匹配结果。 grep -r "Linux" /path/to/directory 其中,-r选项表示递归查找所有文件,如果找到匹配项,则会输出所在的文件名和匹配的行。 4. 使用awk命令从一组数字中找出最大值和最小值,并计算它们的平均数。 echo "1 2 3 4 5" | awk 'BEGIN {max=0;min=999999} {for(i=1;i<=NF;i++) if($i>max) max=$i;else if($i<min) min=$i;total+=$i} END {print "Max:",max,"Min:",min,"Avg:",total/NF}' 其中,BEGIN子句用于初始化max和min变量,NF表示输入行的字段数量,END子句用于计算平均数。 以上是关于awksed和grep的基础练习题,掌握了这些基本操作后,读者可以尝试更复杂的文本处理任务,如去重、排序、计数等。同时,多查阅相关文档和资料,不断练习,可以更好地掌握这些工具。 ### 回答3: awksed、grep三者是Linux中常用的文本处理命令,它们都可以用来处理大量的文本信息。下面是一些实践练习。 1. 使用grep 给定一个文件file.txt,其中的每行都是一个字符串,找出其中包含字符串“hello”的所有行并输出到一个新的文件new.txt。 grep "hello" file.txt > new.txt 2. 使用awk 给定一个包含三列的文件file.txt(英语、数学和科学的成绩),找出其中科学成绩大于80分的所有学生。 awk '$3>80{print $0}' file.txt 3. 使用sed 给定一个文件file.txt,其中有若干行英文句子,将其中所有的小写字母转换为大写字母。 sed 's/[a-z]/\U&/g' file.txt 4. 使用grep和awk 给定一个包含多个文件的目录dir,找出其中含有文件名“error.log”的文件,并统计各个文件中“error”单词出现的总次数。 grep -l "error.log" dir/* | xargs awk '{count +=gsub(/error/,"&")}END{print count}' 以上是一些常用的练习题,可以帮助大家熟悉和掌握这些常用命令的使用方法。需要注意的是,在实践过程中,应该多加尝试,有问题及时查阅相关文档或寻求帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值