如何逆推>>喵?

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
millenniumdark
论坛版主
帖子: 4159
注册时间: 2005-07-02 14:41
系统: Ubuntu 14.04 (Kylin)
联系:

如何逆推>>喵?

#1

帖子 millenniumdark » 2012-05-06 23:48

代码: 全选

cat A >> B
這樣子是把A的內容加到B後面,那麼,如何加到b前面呢?

爲了增加逆推的趣味,增加點難度:

一、駱駝、蛇、紅寶石什麼的,不是哪裏都有的,所以不能依靠。(再說這裏是殼殼劇場,讓那些入侵不合適吧?

二、臨時文件什麼的最討厭了!(因爲B可能很胖哦,克隆一個大胖子太不低碳啦~

先拋一小塊磚做例子吧:

代码: 全选

sed -i -e '1rA' -e '1{h;d}' -e '2{x;G}' B
头像
枫叶饭团
帖子: 14683
注册时间: 2010-06-16 1:05
系统: Mac OS X
来自: Tencent
联系:

Re: 如何逆推>>喵?

#2

帖子 枫叶饭团 » 2012-05-06 23:55

这种情况果然只有用编辑器 了
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 如何逆推>>喵?

#3

帖子 lilydjwg » 2012-05-07 0:20

感觉做不到。
头像
millenniumdark
论坛版主
帖子: 4159
注册时间: 2005-07-02 14:41
系统: Ubuntu 14.04 (Kylin)
联系:

Re: 如何逆推>>喵?

#4

帖子 millenniumdark » 2012-05-07 0:24

枫叶饭团 写了:这种情况果然只有用编辑器 了
不一定哦。awk應該也可以吧。甚至在Bash的加持下,即使僅憑小貓的力量,也可以做到:

代码: 全选

cat A <(cat B) > B
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 如何逆推>>喵?

#5

帖子 lilydjwg » 2012-05-07 0:52

millenniumdark 写了:
枫叶饭团 写了:这种情况果然只有用编辑器 了
不一定哦。awk應該也可以吧。甚至在Bash的加持下,即使僅憑小貓的力量,也可以做到:

代码: 全选

cat A <(cat B) > B
不行的。

这样和使用临时文件有区别么?
头像
link_01
帖子: 1024
注册时间: 2008-11-05 13:24

Re: 如何逆推>>喵?

#6

帖子 link_01 » 2012-05-07 9:41

sed的方法也是复制整个B文件吧?虽然看起来只是修改了开头的,增加了A的内容。
笔记
-------------------------------------
http://blog.163.com/wqt_1101
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 如何逆推>>喵?

#7

帖子 eexpress » 2012-05-07 9:44

这学古文的嘿嘿,果然说话不懂。
● 鸣学
头像
jadeity
帖子: 689
注册时间: 2010-10-21 17:55

Re: 如何逆推>>喵?

#8

帖子 jadeity » 2012-05-07 12:32

那就克隆瘦子A,然后 cat B >> A
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

Re: 如何逆推>>喵?

#9

帖子 aerofox » 2012-05-07 13:12

可以用 dd
头像
millenniumdark
论坛版主
帖子: 4159
注册时间: 2005-07-02 14:41
系统: Ubuntu 14.04 (Kylin)
联系:

Re: 如何逆推>>喵?

#10

帖子 millenniumdark » 2012-05-07 16:48

lilydjwg 写了:
millenniumdark 写了:
枫叶饭团 写了:这种情况果然只有用编辑器 了
不一定哦。awk應該也可以吧。甚至在Bash的加持下,即使僅憑小貓的力量,也可以做到:

代码: 全选

cat A <(cat B) > B
不行的。

这样和使用临时文件有区别么?
呃,乃太誠實了!
头像
millenniumdark
论坛版主
帖子: 4159
注册时间: 2005-07-02 14:41
系统: Ubuntu 14.04 (Kylin)
联系:

Re: 如何逆推>>喵?

#11

帖子 millenniumdark » 2012-05-07 17:12

link_01 写了:sed的方法也是复制整个B文件吧?虽然看起来只是修改了开头的,增加了A的内容。
sed是流編輯器,猜想是只讀開始的部分的吧? (寫入修改的時候是怎麼樣就不太清楚了,是不是還是要把整個文件重寫一遍?似乎和文件系統有關?)
头像
millenniumdark
论坛版主
帖子: 4159
注册时间: 2005-07-02 14:41
系统: Ubuntu 14.04 (Kylin)
联系:

Re: 如何逆推>>喵?

#12

帖子 millenniumdark » 2012-05-07 17:26

jadeity 写了:那就克隆瘦子A,然后 cat B >> A
是這樣吧?

代码: 全选

cp A A.orig
cat B >> A
mv A B
mv A.orig A

代码: 全选

cat B >> A
這步還是要把整個B往磁盤寫一遍,而且在mv A B之前,磁盤裏有兩份B的內容,無論是從性能還是空間佔用的角度都不上算。
头像
jadeity
帖子: 689
注册时间: 2010-10-21 17:55

Re: 如何逆推>>喵?

#13

帖子 jadeity » 2012-05-07 21:57

rename
回复