一道与sed相关的面试题

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

  面试题内容大致如下:

  用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  

 

猜你喜欢

转载自www.cnblogs.com/hana-alice/p/9232626.html