使用sed / grep将字符串从尾部获取到中间的char

时间:2013-11-27 05:04:02

标签: string bash sed grep

我有一些字符串(变量)我需要在bash中编辑以进行进一步分析 它们包括

之类的东西
str="~/folder/item"

如何使用sedgrep来抓取" item" (意思是从尾巴到char' /')?

5 个答案:

答案 0 :(得分:3)

请参阅Shell Parameter Expansion。你可以说:

$ str="~/folder/item"
$ echo ${str##*/}
item

从手册中引用:

  

${parameter##word}

     

这个词被扩展为产生一个模式,就像文件名一样   扩展(请参阅文件名扩展)。如果模式匹配   参数的扩展值的开头,然后是结果   扩展是最短的参数的扩展值   匹配模式('#'案例)或最长匹配模式(   '##'案例)已删除。如果参数为“@”或“*”,则删除模式   操作依次应用于每个位置参数,并且   扩展是结果列表。如果参数是数组变量   使用“@”或“*”下标,将应用模式删除操作   依次对阵列的每个成员,扩展是   结果清单。


使用grep

$ grep -Po '.*/\K.*' <<< $str
item

答案 1 :(得分:2)

假设您正在处理包含所示行的文本文件,那么:

sed 's%.*/\([^/]*\)"%\1%' <<< 'str="~/folder/item"'

这会产生:

item

如果您正在处理包含字符串str的变量~/folder/item,那么您可以使用:

basename "$str"

或:

echo "${str##*/}"

答案 2 :(得分:1)

basename "${str}"在最终/之后给出字符串的最后一部分,包括您可能拥有的任何文件扩展名。如果您想要执行相反操作并获取目录,请使用dirname "${str}"

答案 3 :(得分:0)

basename也适用于此

例如

str="~/folder/item" 
name=$(basename $file)
echo $name

输出将是“item”

答案 4 :(得分:0)

echo $str|awk -F"/" '{print $NF}'

echo "$str" | perl -pe 's/.*\///g'