我有很多文件
101s18-exam02--100-booklets.pdf
MATH232 Exam 01 99 booklets.pdf
35BOOKLETS.pdf
我想编写一个命令,从“小册子”一词之前出现的每个文件中提取数字(忽略大小写)。所以,运行这个命令的输出应该是
$ bash mycommand.sh 101s18-exam02--100-booklets.pdf
100
$ bash mycommand.sh MATH232 Exam 01 99 booklets.pdf
99
$ bash mycommand.sh 35BOOKLETS.pdf
35
我怎样才能做到这一点?
使用
grep
知道-o
标志的实现,并且tr
:这是一个
sh
脚本(不是bash
,虽然它也可以使用bash
)。它假定在命令行中传递给它的字符串中没有嵌入文字换行符。扩展的正则表达式
[0-9]+[^0-9]*booklets
将匹配任何看起来像<integer><zero or more non-digit characters><"booklets">
和 with 的字符串-o
,这正是将从 . 返回的内容grep
。tr
只需删除输出grep
中不是数字或换行符的任何内容。tr
可以替换为,这sed 's/[^0-9].*//'
会删除字符串中第一个非数字字符中的所有内容。测试它:
请注意,其中包含空格的字符串需要被引用。
Bash 的条件测试运算符
[[
可以将文件名与正则表达式进行比较并提取带括号的表达式:这将遍历当前目录中匹配(不区分大小写)单词“booklets”的每个文件。如果您希望一次对单个文件执行某些操作,您可以简化上述内容并将其放入脚本或函数中:
...然后调用它:
我已经完成了下面提到
pythonscript.py
的并将输出流水线化以搜索所需的匹配项。我本可以只使用 python,但我希望使用 grep 来流水线化输出名为
inputfile
file的输入文件:用法:
pythonscript.py
包含:输出:
你可以试试这个 sed