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 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> $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
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 还是有其进步的地方, 至少我是这样认为的.
- to bashman
- to
- 【english】to to it
- To learn, to share.
- To Read
- To Learn
- listen to
- thanks to ......
- to TTT
- TO DO ... ...
- TO ROUTLE
- To Sophia
- to:SingYes
- to:雷艾伦
- TO Z28
- TO 红梅
- TO EveryOne
- To gongwei8401:
- 病来如山倒
- SHELL编程基础 By jackie
- JSF不能运行,显示错误
- Google 企业应用套件(Google Apps)拒绝中国域名申请?
- 抓虾、鲜果、有道、Google Reader等RSS阅读器更新速度对比
- to bashman
- cin与getline函数的疑问
- 1-HTML特殊字符
- Addon domain SubDomain Parked Domains
- 股神点评3月24日(下周一)走势和个股(原创)
- 我的Ping自动更新通知-最有价值的Ping Server API
- 让Windows Live Writer支持WordPress的Tags(不用插件)
- Google Analytics(Google分析)与雅虎统计的对比
- LINUX Daemon程序设计