返回列表 发帖
回复 16# yiwuyun


奇思妙想,nice!

那个多余的 p 可以这样去掉:
sed -n "=" a.txt|sed -n "1~6H;${g;p}"COPY
或者这样:
sed -n "=" a.txt|sed -n "${p;q};1~6p"COPY

TOP

回复 16# yiwuyun


借兄台代码,改写成这样就没问题了,思路不变:
sed -n "$=;$q;0~6=;1~6=" a.txt|sed -nr "N;s/\n(.*)/,\1w/;p"|sed -n "p;="|sed -r "N;s/\n(.*)$/\1.txt/"|sed -nf - a.txtCOPY
这个思路下还能继续简化吗...

TOP

很好, sed造诣够深的,佩服,学习了。对最后一行的处理可能还需要冗余一下。要不然最后一行可能丢失。
sed -n "$=;$q;0~6=;1~6=" a.txt|sed -nr "${h;G;s/\n(.*)/,\1w/;p};N;s/\n(.*)/,\1w/;p"|sed -n "p;="|sed -r "N;s/\n(.*)$/\1.txt/"|sed -nf - a.txtCOPY
1

评分人数

    • CrLf: 感谢指正!技术 + 1

TOP

回复 19# yiwuyun


感谢提醒,不过你想复杂了,其实 sed 的 N 在碰到 $ 时,会阻止后面的指令,所以行数若为奇数行,最后一行是不会被输出的
简单把
sed -n "$=;$q;0~6=;1~6="COPY
改成
sed -n "${=;=;q};0~6=;1~6="COPY
就可以了

完整的就是
sed -n "${=;=;q};0~6=;1~6=" a.txt|sed -nr "N;s/\n(.*)/,\1w/;p"|sed -n "p;="|sed -r "N;s/\n(.*)$/\1.txt/"|sed -nf - a.txtCOPY

TOP

本帖最后由 terse 于 2015-2-13 12:37 编辑

回复 20# CrLf
我试下这样也可以
反正最后行始终打印行号
@sed -n "$=;0~6=;1~6=" COPY
1

评分人数

    • CrLf: 感谢指点!技术 + 1

TOP

回复 21# terse


    也是,哎呀好暴力

TOP

如果问题已解决,请在标题最前面标上[已解决]
http://www.bathome.net/thread-3473-1-1.html

TOP

返回列表