grep捕获一个单词组

时间:2013-01-02 05:44:21

标签: bash shell grep

我正在尝试从中提取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才能有更清洁的方法来做到这一点。有没有办法做到这一点?

3 个答案:

答案 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'