我有一个字符串变量Short_name="This_is_test_string"
我想使用test_string
从Short_name
变量输出子串sed
。
答案 0 :(得分:1)
像这样:
echo 'Short_name="This_is_test_string"' | sed 's/.*_is_//;s/"//'
打破它:
s -- substitute command
/ -- delimiter
.*_is_ -- match this
.* -- any character (.), as many as possible (*)
_is_ -- these 4 exact characters
/ -- delimiter
(nothing) -- what to replace any match with
/ -- delimiter
; -- end this command, start another
s -- substitute command
/ -- delimiter
" -- match this character
/ -- delimiter
(nothing) -- what to replace any match with
/ -- delimiter
<强> [编辑] 强>
关键是要弄清楚哪种模式符合您的需求(我还不太了解)。也许这个:
... | sed 's/.*[[:<:]]is[ _]*//;s/"//'
这里的“棘手的位”是[[:<:]]
,这是一个“零宽度断言”(在本例中是“词的开头”),它使我们不会对这样的输入做错事:
echo 'string2=is this it"' | sed 's/.*[[:<:]]is[ _]*//;s/"//'
(阻止我们匹配“此”中的“是”)
答案 1 :(得分:0)
你不需要sed。 Bash parameter expansion会:
$ Short_name="This_is_test_string"
$ echo "${Short_name##*_is_}"
test_string
删除从字符串开头到 last 的所有内容&#34; _is _&#34;