Ulr*_*rik 3 regex bash perl grep busybox
我有很多bash脚本使用perl表达式grep来提取两个分隔符之间的子字符串.例:
echo BeginMiddleEnd | grep -oP '(?<=Begin).*(?=End)'
Run Code Online (Sandbox Code Playgroud)
问题是,当我将这些脚本移植到运行的平台时busybox,"集成" grep无法识别-P开关.是否有一种干净的方法来使用grep和regular expressions?
编辑:没有perl,sed或awk在该平台上.这是一个轻量级linux.
您可以使用这样awk的自定义字段分隔符来获得相同的输出:
echo 'BeginMiddleEnd' | awk -F 'Begin|End' '{print $2}'
Middle
Run Code Online (Sandbox Code Playgroud)
假设每行最多发生一次,则可以使用
sed -nr 's/.*Begin(.*)End.*/\1/p'
Run Code Online (Sandbox Code Playgroud)
使用grep和非贪婪量词,您还可以每行打印多个。