anu*_*g86 -9 regex perl awk sed
可能这个问题多次被问到能否在你的perl脚本中加入awk one liner.但是这些问题对于以下问题过于具体:
示例:我有输出,ls -lart第9列是文件名.我很容易在awk中做到这一点ls -lart|awk '{print $9}'.同样的事情当然可以使用perl来完成readdir().但是在perl中提取第8列或第7列并不容易?如果我必须提取数据管道将其管道输送到sed等,情况会变得更糟.
另一个例子: 我有一个特定的DIR,它有许多格式的文件,如:
ABC_9090_DEF_10-22-30_13-07-2014.temp
Run Code Online (Sandbox Code Playgroud)
注意date_time.temp标记部分.这里的格式是ABC_4digits_DEF_hours-minutes-seconds_day-month-year
我想只看到刚刚创建的新文件(比如说从现在起5分钟之前).使用awk/sed的方法是(伪代码,让我知道你是否需要我复制实际的一个班轮):
ls -lart|awk '{print $9}'|egrep 提取10-22-30_13-07-2014问题: 但由于某种原因(其他复杂性)我想在perl中编写它并且我发现当使用系统命令在perl中使用它时,if条件if($ 1> $ mynum)会抛出错误.它说使用'>'语法错误,即使使用单引号,双引号,没有引号.
有人可以告诉我一般情况:
如果给出选择,为什么有人不会在这种情况下使用awk,sed而不是perl?
如果你喜欢这个想法:
随意做.这对我来说听起来很糟糕,但你知道:你的里程......
在perl中包含awk或sed时应该记住的事情的通用解释不是特定于这个问题(希望也应该解决这个特定的问题:))
要记住的通用事项:
$variables- 就像$9可以解释的那样:
$9可以是存储正则表达式捕获的perl变量)$9可以是shell保持第9个位置arg 的变量)awk(这意味着第9列)举个例子:这ls -lart|awk '{print $9}是你能做的最糟糕的事情之一.
想像:
this is my file.txt ls -lart|awk '{print $9}?猜错了,只打印出来的this.当然,这是错误的.解析文件名是什么来源于stdin始终是可怕的想法(除非你有NULL结尾的文件名),因为文件名可以包含空格-不仅spaces但是tab还是newline人物了.
第二个例子:
find用来实现想要的:print only new files modified in the last 5 minfind命令所做的任何事情以及更多File::Find家庭Class::Path或类似的模块| 归档时间: |
|
| 查看次数: |
248 次 |
| 最近记录: |