一道与sed相关的面试题

  在我刚接触Linux的那段时间,参加了一个面试其中有一道面试题没做出来,这道题一直烙在我脑海,面试完之后我便开始认真的学了一下sed,轻松决解。

  面试题内容大致如下:

  1.用sed将    one 1   转变为         one    1
                   two 1                          two     2
                   three 1                     three    3
                   four 1                            four      4

文件名:test.txt

  sed “=” test.txt | sed “N;s/\n/ /;s/\(. \)\(.*\)\( 1\)/\2\1/”

  执行过程:sed的"="选项为显示行号:

sed -i "=" test.txt 

1
one    1
2
two    1
3
three  1
4
four    1  

n 输出模式空间行,读取下一行替换当前模式空间的行,执行下一条处理命令而非第一条命令。
N 读入下一行,追加到模式空间行后面,此时模式空间有两行,并用换行符分隔。
h 把模式空间里的行拷贝到暂存空间。
H 把模式空间里的行追加到暂存空间。
g 用暂存空间的内容替换模式空间的行。
G 把暂存空间的内容追加到模式空间的行后。
x 将暂存空间的内容于模式空间里的当前行互换。

 

sed -i "N;s/\n/ /;s/\(. \)\(.*\)\(1\)/\2\1/"    test.txt

N:

模式空间:
1\none 1 2\ntwo 1 3\nthree 1 4\nfour 1  

s/\n/ /:

1 one    1
2 two    1
3 three   1
4 four    1  

s/\(. \)\(.*\)\(1\)/\2\1/:

one    1
two    2
three  3
four   4  

 

2.奇数行插入一个空行,偶数行插入两个空行

sed '1~2!G' info.txt | sed '/^$/!G'

 

3.统计域名

文本:

http://www.baidu.com/more/
http://www.baidu.com/guding/more.htmlhttp://www.baidu.com/events/20060105/photomore.htmlhttp://hi.baidu.com/browse/http://www.sina.com.cn/head/www20021123am.shtmlhttp://www.sina.com.cn/head/www20041223am.shtml
[root@docker1 test]# sed 's/http:\/\//\n/g' yunm.txt | sed '/^$/d' |awk -F/ '{print $1}' | sort | uniq -c | sort -r
      3 www.baidu.com
      2 www.sina.com.cn
      1 hi.baidu.com

 

 

 

转载于:https://www.cnblogs.com/hana-alice/p/9232626.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值