to bashman

PowerShell vs Bash

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 还是有其进步的地方, 至少我是这样认为的.

### Bash 命令用法与示例 #### 什么是 BashBash(Bourne Again SHell)是一种广泛使用的 Unix Shell 和命令语言,它是 GNU Project 的一部分。作为默认的 shell,在大多数 Linux 发行版和 macOS 中被采用。其主要功能是通过解析用户输入并执行相应的程序或脚本来实现系统管理和其他任务。 以下是关于 Bash 命令的一些基本用法及其示例: --- #### 查看文件内容 `cat` 命令用于显示文件的内容或将多个文件连接到一起。 ```bash cat filename.txt ``` 此命令会打印 `filename.txt` 的全部内容到标准输出设备上[^1]。 如果要查看大文件的一部分内容可以使用 `head` 或者 `tail` 命令: - 使用 `head` 显示前几行数据: ```bash head -n 5 filename.txt ``` - 使用 `tail` 显示最后几行数据: ```bash tail -n 5 filename.txt ``` --- #### 列出目录中的文件 `ls` 是用来列出当前工作目录下所有文件以及子目录的信息。 ```bash ls -l ``` 这个例子展示了如何以长列表的形式展示文件详情,包括权限、链接数、拥有者、组、大小及修改时间等信息[^1]。 为了更清晰地看到隐藏文件也可以加上 `-a` 参数: ```bash ls -la ``` --- #### 移动或重命名文件 `mv` 可以移动文件或者更改它们的名字。 ```bash mv oldname.txt newname.txt ``` 这条语句把名为 `oldname.txt` 的文档改成了 `newname.txt`。 同样适用于跨路径转移文件位置: ```bash mv /path/to/source/file.txt /destination/directory/ ``` --- #### 自动完成机制提升效率 当键入部分名称后按下 Tab 键两次即可触发自动补全提示可能匹配项的功能;对于唯一的结果则直接填充完毕无需再次确认[^2]。 例如尝试创建一个新的文本档叫做 testfile 并编辑它的时候只需要打字直到独一无二的部分再按 tab 就好啦! --- #### 获取帮助手册 无论是新手还是老手都不可避免遇到陌生的新工具时候不知道怎么下手的情况——不用担心!每条linux下的核心utils几乎都有详尽的帮助文档等着我们去挖掘学习哦~只需简单记住两个关键词:`--help`还有就是专门针对特定主题深入探讨型阅读材料提供者的 man page (manual pages). 举个栗子吧,想知道 cp 这家伙到底支持哪些参数?那就试试下面这招呗: ```bash cp --help ``` 或者是查阅更加详细的指南书: ```bash man cp ``` 以上两种方式均能够有效解答疑惑之处[^3]. --- #### 编写简单的 bash 脚本 除了单独运行单条命令外还可以组合起来形成自动化流程处理复杂逻辑运算等等强大功能呢! 下面给出一个小实例演示计算从0加到给定整数值之间的总合: 保存为 sum.sh 后赋予可执行权限 chmod +x sum.sh 然后再 ./sum.sh 数字 即可得到结果. ```bash #!/bin/bash total=0 for ((i=1;i<=$1;i++)) do total=$((total+i)) done echo $total ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值