我需要通过 bash 发现字符串中的模式,我想使用 crontab 自动执行。
我有一个包含如下数据的字符串
%d/%m/%Y %H:%i aaa bbb ccc 123456 ddd 7890 eee
之类的。这是一份报告。
我想定义像字符串掩码这样的常量,并将每个子字符串与我的掩码进行比较。我想我会混合使用长度和字符位置。
我正在谷歌搜索以获得更好的想法并观看其他一些实现,但我没有找到有用的结果。
有什么建议吗? 谢谢。
编辑: 一些输入样本
01/01/2015 06:20 EXAMPLE 2 (001) Foo bar X(12)
02/01/2015 12:03 EXAMPLE 1 (000) 01234567 Baz bax X(04)
03/01/2015 10:37 EXAMPLE 1 (000) Bam bac (X:1-16). [ SOMEGUY ]
04/01/2015 11:04 EXAMPLE 2 (001) 12345678 Baz bax X(12) SOMEACTION
05/01/2015 12:34 EXAMPLE 2 (001) 45678901 Bim bum X(01) SOMEACTION NAME SURNAME
08/08/2015 19:00 SOMEGUY Bic bac. [ SOMEGUY ]
01/01/2015 11:34 EXAMPLE 2 (001) 78901234 Gic gia gim X(01)
而我需要输出
variabile $date $time $example $codeline $action $message $name $surname
Edit2:我忘了说我正在用这个循环该行
while IFS=' ' read -ra field; do
...
done <<< "$line"
最佳答案
使用日期
来格式化字符串:
$ date +"%d/%m/%Y %H:%m aaa bbb ccc 123456 ddd 7890 eee"
09/10/2015 14:10 aaa bbb ccc 123456 ddd 7890 eee
如果这就是你的意思。
或者使用printf
,例如:
printf "%s/%s/%s %s:%s aa bb cc" 2015 01 01 00 00
或创建等效的sprintf
函数:
sprintf() { local stdin; read -d '' -u 0 stdin; printf "$@" "$stdin"; }
如果您想以其他方式阅读,请使用read
,例如:
while IFS=':/ ' read d m y h m _; do echo "$d $m $y $h $m"; done < data.txt
关于bash - 构建一个在脚本中使用的解析器(bash),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32995100/