我有哈希问题
我必须将子字符串带到特定字符串的字符串
例如,如果我有
"adgj fghsjekoe === / gghhj"
我必须从" /"中获取字符串,在这种情况下
"/ gghhj"
但我不知道真正的位置,我只知道我必须从"/"
我可以使用哪个命令?我必须使用c u
t?但我不知道使用什么选项。我需要一个可以将字符串从"/"
剪切到字符串末尾的命令。
感谢
答案 0 :(得分:1)
使用GNU sed:
echo 'adgj fghsjekoe === / gghhj' | sed 's|.*/|/|'
输出:
/ gghhj
答案 1 :(得分:0)
另一种可能的sed
解决方案:
$ echo "foo/bar" | sed 's#[^/]*##'
/bar
如果您在变量中包含字符串,则还可以在启用parameter expansion的情况下使用extglob。参数扩展的优点在于它由bash
:
$ shopt -s extglob #enables extglob
$ var="foo/bar"
$ echo "${var##*([^/])}"
/bar
$ echo "${var/*([^\/])}" #another possible expansion
/bar
如果输入中没有/
,则所有解决方案都不会打印任何内容(我希望这是所需的行为)。
答案 2 :(得分:0)
您可以通过参数扩展来使用shell的内部工具本身。
val="adgj fghsjekoe === / gghhj" ##Taking your string into a variable called val here.
echo ${val#*= } ##Removing the value till `= ` by parameter expansion here.
输出如下。
/ gghhj
答案 3 :(得分:0)
对于这么简单的事情,我认为sed
有点矫枉过正,有一个专门的cut
命令:
echo "your string /..." | cut -d '/' -f 2
-d
参数指定用于剪切字符串的字符,在我们的示例中,您要剪切/
。 -f
参数指定您想要的字段,从1开始。请注意,您可以执行-f 2-
之类的奇特之处(即字段2和以下内容)等。
答案 4 :(得分:0)
您正在使用bash,因此您可以使用子字符串替换进行参数扩展。这使用shell本身并避免产生调用实用程序的附加子shell,例如
$ var="adgj fghsjekoe === / gghhj"
$ echo "${var/*\//\/}"
/ gghhj
子字符串替换的格式为${var/find/replace}
,只需find
替换replace
${var//find/replace}
,find
将所有replace
替换为/
}}
(注意:)在查找和替换的实际\/
之上进行转义,例如'/'
将其指定为文字'/'
,而不是参数扩展形式)
您也可以在案例中使用参数扩展和子字符串删除。 (尽管你需要先见之明,在结果前加上${var#*/}
,你将要删除)。例如,要将 left 中的字符串修剪为特定字符(此处为正斜杠),您可以使用" gghhj"
。然而,这只会让您只有/
,但只需在扩展前添加$ var="adgj fghsjekoe === / gghhj"
$ echo "/${var#*\/}"
/ gghhj
前缀即可取代您删除的那个,例如。
'/'
(注意:此处,由于子字符串删除表单中没有/
,因此无需转义[[:blank:]]
< / p>