我有一个文本文件,其中包含各种条目。每个条目都以包含所有星号的行结束。
我想使用 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 http://www.linuxjournal.com/content/bash-regular-expressions并稍作修改,打印正则表达式的整个匹配项以及每个捕获的匹配项。
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]}
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)