我有一个包含各种条目的文本文件.每个条目都以包含所有星号的行结束.
我想使用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
Run Code Online (Sandbox Code Playgroud)
但是,这只是将匹配文本中的每个单词分配给$ error,而不是整个块.
Cas*_*bel 27
我很惊讶在这里看不到本地bash解决方案.是的,bash有正则表达式.您可以在线找到大量随机文档,特别是如果在查询中包含"bash_rematch",或者只是查看手册页.这是一个愚蠢的例子,取自这里并略微修改,打印整个匹配,以及每个捕获的匹配,用于正则表达式.
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
Run Code Online (Sandbox Code Playgroud)
重要的是,[[ ... ]]
使用其正则表达式比较的扩展测试=~
存储整个匹配${BASH_REMATCH[0]}
和捕获的匹配${BASH_REMATCH[i]}
.