如何在linux中提取两个字符之间的单词?

时间:2015-01-30 06:50:50

标签: linux awk sed grep

我将以下内容存储在名为tmp.txt

的文件中
user/config/jars/content-config-factory-3.2.0.0.jar

我需要将这个单词存储到变量 -

$variable=content-config-factory

我写了以下内容

  while read line
   do
    var=$(echo $line | awk 'BEGIN{FS="\/"; OFS=" "} {print $NF}' )
    var=$(echo $var | awk 'BEGIN{FS="-"; OFS=" "} {print $(1)}' )
    echo $var
  done < tmp.txt

这将返回结果“content”而不是“content-config-factory”。

任何人都可以告诉我如何有效地从字符串中提取两个字符之间的单词。

3 个答案:

答案 0 :(得分:4)

awk解决方案就像

awk -F/ '{sub("-[^-]+$", "", $NF); print $NF}

<强>测试

$ echo "user/config/jars/content-config-factory-3.2.0.0.jar" | awk -F/ '{sub("-[^-]+$", "", $NF); print $NF}'
content-config-factory

答案 1 :(得分:3)

您也可以尝试这种方式并获得预期结果

 variable=$(sed 's:.*/\(.*\)-.*:\1:'  FileName)

 echo $variable

OutPut:

content-config-factory

答案 2 :(得分:2)

你可以使用grep,

grep -oP '(?<=/)[^/]*(?=-\d+\.)' file

示例:

$ var=$(echo 'user/config/jars/content-config-factory-3.2.0.0.jar' | grep -oP '(?<=/)[^/]*(?=-\d+\.)')
$ echo "$var"
content-config-factory