我有很多bash
脚本在perl
中使用grep
个表达式,以便在两个分隔符之间提取子字符串。例如:
echo BeginMiddleEnd | grep -oP '(?<=Begin).*(?=End)'
问题是,当我将这些脚本移植到运行busybox
的平台时,集成了&#39; grep
无法识别-P开关。有没有一种干净的方法可以使用grep
和regular expressions
?
编辑:
该平台上没有perl
,sed
或awk
。它是轻量级linux
。
答案 0 :(得分:6)
您可以使用awk
这样的自定义字段分隔符来获得相同的输出:
echo 'BeginMiddleEnd' | awk -F 'Begin|End' '{print $2}'
Middle
答案 1 :(得分:3)
假设每行不超过一次,您可以使用
sed -nr 's/.*Begin(.*)End.*/\1/p'
使用grep和非贪婪量词,你也可以每行打印多个。
答案 2 :(得分:0)
使用bash
内置参数替换:
# grab some string from grep output
f=BeginMiddleEnd
middleend=${f/Begin/} # do some substitution to lose "Begin"
echo $middleend
MiddleEnd
beginmiddle=${f%%End} # strip from right end to lose "End"
echo $beginmiddle
BeginMiddle
加载更多示例here。