嗨 - 我没有大量的shell脚本编写经验,我需要使用正则表达式(或多个正则表达式)作为分隔符创建一个bash脚本,将单个大音符字段拆分为单个音符数组。我的输入如下:
这是第一个音符(AA 01/23 10:00A)这是第二个音符(AB 01/24 11:00P)这是第三个音符(C101 / 25/201512:15A)这是第四个音符(最后的注释(D2 03/10 03:15P)
我的数组需要看起来像这样:
This is the first note AA 01/23 10:00A
This is the second note AB 01/24 11:00P
This is the third note C1 01/25/2015 12:15A
This is the fourth (and final) note D2 03/10 03:15P
详细说明:
我已经定义了两个正则表达式来识别注释标记的开头和结尾,但是我对如何将数据实际放入数组感到茫然。我的正则表达是:
starttag= "\([A-Z0-9]{2}"
endtag= "\d+:\d+[A|P]\)"
我尝试使用IFS创建一个数组,但看起来IFS不能包含多个字符 - 对吗?我的结果似乎是在我的正则表达式中的每个字符上拆分输入,而不是将整个正则表达式作为单个分隔符进行评估。
非常感谢任何帮助。
答案 0 :(得分:0)
我的sed并不是最好的,这看起来很愚蠢而且没有保修:
eval $(sed 's/\([^()]*\)(\([A-Z0-9]\{2\}\)\([^AP]*[AP]\)) */\1 \2 \3" "/g ; s/\([^ ]\)\([0-9]\{2\}:[0-9]\{2\}[AP]\)/\1 \2/g ; s/ "$//g ; s/^.*/array=("&)/' file)
将“array”更改为要命名的数组的名称,并将“file”更改为文件输入的名称。通过测试输入,sed行扩展为:
array=("This is the first note AA 01/23 10:00A" "This is the second note AB 01/24 11:00P" "This is the third note C1 01/25/2015 12:15A" "This is the fourth (and final) note D2 03/10 03:15P")
eval选择并将其扩展到当前正在运行的shell中。