在unix中使用sed删除特定的单词

时间:2016-01-21 18:35:46

标签: string bash sed substring

我有一个字符串变量Short_name="This_is_test_string"

我想使用test_stringShort_name变量输出子串sed

2 个答案:

答案 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;