to bashman

来源:互联网 发布:淘宝多少人付款是多久 编辑:程序博客网 时间:2024/04/30 09:16

bash得益于 rev 确实短很多, 不过 bash 中单引号, 双引号, sed, awk 对新手如同噩梦一样, 呵呵.

ps: alice.txt中内容不少, 你可以考虑awk加两层循环. 下面是简化了点的版本, 可惜现在机器上没有2.0, 不然用 -join就可以一行搞定了.

PS E:> $s = (gc alice.txt|%$_.split()}|%{$ofs='';"$($_[($_.length-1)..0])"})

PS E
:> $ofs = ' '"$s"
resuoiruC
' dna '!resuoiruc deirc ecilA ehs( saw os hcum ,desirprus taht rof eht
tnemom ehs etiuq togrof woh ot kaeps doog ;)hsilgnE won
' m'I gninepo tuo ekil
eht tsegral epocselet taht reve 
!saw ,eyb-dooG '!teef rof( nehw ehs dekool
nwodta reh ,teef yeht demees ot eb tsomla tuo fo ,thgis yeht erew gnitteg os raf
.)ffo ,hO
' ym roop elttil ,teef I rednow ohw lliw tup no ruoy seohs dna
sgnikcots rof uoy 
,won ?sraed m'I erus _I_ t'nahs eb !elba I llahs eb a taerg
laed oot raf ffo ot elbuort flesym tuoba 
:uoy uoy tsum eganam eht tseb yaw uoy
;nac tub
-- I tsum eb dnik ot ',meht thguoht ,ecilAro' spahrep yeht t'now klaw
eht yaw I tnaw ot !og teL em :ees ll
'I evig meht a wen riap fo stoob yreve
'.samtsirhC

ps 比短未必占便宜, 而且速度上也有缺陷. 不过下面这个例子, bash 中我一直没有办法找到一行的等价代码:

PS C:/Users/Eden> $err = $($success = dir ip.txt, a) 2>&1
PS C
:/Users/Eden> $err
Get
-ChildItem : 找不到路径“C:/Users/Eden/a”,因为该路径不存在。
所在位置 行
:1 字符: 24
+ $err = $($success = dir  <<<< ip.txt, a) 2>&1
PS C
:/Users/Eden> $success
    目录
: Microsoft.PowerShell.Core/FileSystem::C:/Users/Eden

Mode                LastWriteTime     
Length Name
----                -------------     ------ ----
-a---        2007/12/13     23:14       1710 ip.txt

一行, 可以把成功失败的对象保存到两个独立的变量中.

另外还有一个原地对文件进行修改的小例子:

 

PS C:/Users/Eden> cat text.txt
9:00
120
10:00
150
11:00
200
PS C
:/Users/Eden> ${c:text.txt} = ${c:text.txt} -replace '^/d+$','$0:00'
PS C
:/Users/Eden> gc text.txt
9:00
120:00
10:00
150:00
11:00
200:00

 

也许你可以用 sed -i 来实现, 不过 -i 这个参数是某些版本 sed 才支持的, 某些情况无法使用. 这个问题, 以前在论坛常常遇到, 一般只好是重定向再替换了.

我用 bash 也很久, 以前泡在 chinaunix 上 shell 区, Edengundam, 有机会可以讨论下. ps 在速度上相对 bash, perl 是下风, perl 处理大文件的速度很强, 你可以在 chinaunix 上找到帖子. 大概是 10G 文档吧. ps 估计死好几遍, 呵呵

不过 ps 的面向对象让它还是占到一些优势, 随便可以访问 .Net 的类, 这点 bash 就不行了. 无论如何, ps 还是有其进步的地方, 至少我是这样认为的.

原创粉丝点击