我有一些字符串(变量)我需要在bash中编辑以进行进一步分析 它们包括
之类的东西str="~/folder/item"
如何使用sed
或grep
来抓取" item" (意思是从尾巴到char' /')?
答案 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'