bash - 构建一个在脚本中使用的解析器(bash)

标签 bash parsing

我需要通过 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 

更多示例,请参阅:How do I split a string on a delimiter in Bash?

关于bash - 构建一个在脚本中使用的解析器(bash),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32995100/

相关文章:

linux - 如何将状态代码从远程运行的 shell 脚本返回到本地 shell 脚本

bash - 使用 join 进行笛卡尔积

file - 如何以 python 方式从行号边界内的文本文件中获取文本?

ios - iOS-使用NSURLSession和dataTaskWithRequest在给定的URL列出目录/文件?

java - 如何在 Java 中解析多维 JSON 字符串

javascript - jQuery attr 是否允许非标准?

linux - bash:命令在终端中工作,而不是在脚本中工作

linux - shell 脚本: Excecute a command in "screen"

bash - 在/dev/stdout 上运行用户和权限被拒绝

parsing - FParsec 中的示例语法超出了示例范围?