亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: Sed - 文本處理 [打印本頁]

作者: newoz    時(shí)間: 2014-05-21 10:23
標(biāo)題: Sed - 文本處理
我想用sed 來處理這個(gè)文件
  1. < ABC1
  2. > Hello1
  3. > Hello2
  4. < ABC2
  5. > Hello3
  6. < ABC3
  7. > Hello4
  8. > Hello5
  9. > Hello6
  10. > Hello7
復(fù)制代碼
想要的結(jié)果是:
  1. ABC1.Hello1
  2. ABC1.Hello2
  3. ABC2.Hello3
  4. ABC3.Hello4
  5. ABC3.Hello5
  6. ABC3.Hello6
  7. ABC3.Hello7
復(fù)制代碼
我的想法是看到 "<" 就把后面的字段保留, 看到">"后,將保留的字段連上打印,但是好像控制得不對。
  1. sed '/</{s/< //;H;ta};/>/{N;s/[><]//g;s/\([^\n]*\)\n\([^\n]*\)/\1\.\2/};:a' file
  2. Parent1
  3. Child1. Child2
  4. Parent2
  5. Child3. Parent3
  6. Child4. Child5
  7. Child6. Child7
復(fù)制代碼

作者: Herowinter    時(shí)間: 2014-05-21 10:26
回復(fù) 1# newoz
不允許作弊用awk嗎?


   
作者: 關(guān)陰月飛    時(shí)間: 2014-05-21 10:28
我想用awk來處理這個(gè)問題:
  1. [root@ awktest]# cat file
  2. < ABC1
  3. > Hello1
  4. > Hello2
  5. < ABC2
  6. > Hello3
  7. < ABC3
  8. > Hello4
  9. > Hello5
  10. > Hello6
  11. > Hello7
  12. [root@ awktest]# awk '/</{a=$2;next}{print a"."$2}'  file
  13. ABC1.Hello1
  14. ABC1.Hello2
  15. ABC2.Hello3
  16. ABC3.Hello4
  17. ABC3.Hello5
  18. ABC3.Hello6
  19. ABC3.Hello7
復(fù)制代碼

作者: newoz    時(shí)間: 2014-05-21 10:31
awk我也會(huì)啊, 但是用到sed 總是控制不好。
作者: yestreenstars    時(shí)間: 2014-05-21 10:39
這種問題用awk來做是最簡單的:
  1. awk '/^</{t=$2;next}{$0=t"."$2}1'
復(fù)制代碼

作者: Herowinter    時(shí)間: 2014-05-21 10:59
回復(fù) 1# newoz
sed水平一般,請多指教。
  1. sed -n '/</{h;:1;N;/>/{s/^<\s*//;s/\s*>\s*/./;p;g;b1};/\n</D}' i
  2. ABC1.Hello1
  3. ABC1.Hello2
  4. ABC2.Hello3
  5. ABC3.Hello4
  6. ABC3.Hello5
  7. ABC3.Hello6
  8. ABC3.Hello7
復(fù)制代碼

作者: yinyuemi    時(shí)間: 2014-05-21 11:16
回復(fù) 1# newoz
  1. sed -nr ':a;$!N;s/(< ([^\n]+))\n> ([^\n]+)/\2.\3\n\1/;/\./P;D;ta'
復(fù)制代碼

作者: yestreenstars    時(shí)間: 2014-05-21 11:49
  1. $ sed -r '/</{s/< //;h};/>/{s/> //;G;s/(.*)\n(.*)/\2.\1/p};d' i
  2. ABC1.Hello1
  3. ABC1.Hello2
  4. ABC2.Hello3
  5. ABC3.Hello4
  6. ABC3.Hello5
  7. ABC3.Hello6
  8. ABC3.Hello7
復(fù)制代碼

作者: newoz    時(shí)間: 2014-05-21 12:08
本帖最后由 newoz 于 2014-05-21 12:12 編輯
yestreenstars 發(fā)表于 2014-05-21 11:49
$ sed -r '/</{s/< //;h};/>/{s/> //;G;s/(.*)\n(.*)/\2.\1/p};d' i


這個(gè)正是我要的,完全按照我的思路。非常感謝。

我其實(shí)已經(jīng)很接近了。 G 和 d 命令很有用。

我自己按照你的思路改正的。
  1. sed '/</{s/< //;h;ta};/>/{G;s/[><] //g;s/\([^\n]*\)\n\([^\n]*\)/\2\.\1/p};:a;d' file
復(fù)制代碼

作者: newoz    時(shí)間: 2014-05-21 12:22
我的命令還可以簡化
  1. sed '/</{h;ba};G;s/[><] //g;s/\(.*\)\n\(.*\)/\2\.\1/p;:a;d' file
  2. sed -r '/</{h;ba};G;s/[><] //g;s/(.*)\n(.*)/\2\.\1/p;:a;d' file
復(fù)制代碼
這個(gè)相當(dāng)于用sed 來解決 if-then-else 的做法。 應(yīng)該算是比較通用的方法,以后會(huì)有用,特地寫下來。
  1. /</          #  相當(dāng)于 if 的條件判斷
  2. {h;ba};  # 相當(dāng)于  if 的 then 后的命令
  3. G;s/[><] //g;s/(.*)\n(.*)/\2\.\1/p;    # 相當(dāng)于 else后的命令
復(fù)制代碼
謝謝大家,學(xué)到很多。




歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2