我有一个包含各种条目的文本文件.每个条目以包含所有星号的行结束.
我想使用shell命令来解析这个文件,并将每个条目分配给一个变量.我该怎么做?
以下是输入文件的示例:
*********** Field1 *********** Lorem ipsum Data to match *********** More data Still more data ***********
这是我的解决方案到目前为止
#!/bin/bash for error in `python example.py | sed -n '/.*/,/^\**$/p'` do echo -e $error echo -e "\n" done
然而,这只是将匹配文本中的每个单词分配给$error,而不是整个块.
我很惊讶,没有看到一个本机的bash解决方案.是的,bash有正则表达式.您可以在线查找大量的随机文档,特别是如果在查询中包含“bash_rematch”,或者仅查看手册页.这是一个愚蠢的例子,从
here开始,稍作修改,打印整个匹配以及每个捕获的匹配,用于正则表达式.
if [[ $str =~ $regex ]]; then echo "$str matches" echo "matching substring: ${BASH_REMATCH[0]}" i=1 n=${#BASH_REMATCH[*]} while [[ $i -lt $n ]] do echo " capture[$i]: ${BASH_REMATCH[$i]}" let i++ done else echo "$str does not match" fi
重要的一点是扩展测试[[…]]使用其正则表达式比较=〜将整个匹配存储在${BASH_REMATCH [0]}中,捕获的匹配在${BASH_REMATCH [i]}中.