我正在尝试从中提取CONFIG_X86_ACPI_CPUFREQ
参数:obj - $(CONFIG_X86_ACPI_CPUFREQ)。我想将此概括为其他
可能的选项 - 比如
XXX-$(YYYY)
- 所以我想在shell脚本中仅从此字符串中提取YYYY
。
我这样做了 -
# echo "obj-\$(CONFIG_MMC_SDHCI)" | cut -d"\$" -f2 | cut -d"(" -f2 | cut -d ")" -f1
CONFIG_MMC_SDHCI
但我相信只有使用grep才能有更清洁的方法来做到这一点。有没有办法做到这一点?
答案 0 :(得分:0)
使用sed
:
echo "obj-\$(CONFIG_MMC_SDHCI)" | sed 's/.\{3\}-\$(\(.*\))/\1/g'
您可以使用...代替.\{3\}
如果你确定你的东西只在括号之间,那么你可以进一步简化它:
sed 's/.*(\(.*\))/\1/g'
答案 1 :(得分:0)
一种方式:
x='XXX-$(YYYY)'
$ echo $x | awk -F'[)(]' '{print $2}'
YYYY
将分隔符设为'('
和')'
,awk
将在$ 2中包含必填字段。
<强>更新强>:
使用grep:
$ echo $x | grep -oP '(?<=\().*(?=\))'
YYYY
-P
的{{1}}选项用于Perl,就像正则表达式一样。此表达式表示grep
之前的任何内容,后跟'('
。
答案 2 :(得分:0)
echo $x | perl -ne '$_=m/.*\$\(([^\)]*)\)/;print $1'