获取两个字符串之间的字符串

获取两个字符串之间的字符串

我需要从这个字符串[%L10n.msg('foo')%]中获取内部文本[%L10n.msg(',所以')%]在这个例子中我应该得到foo.

我找到了很多例子,但没有一个有效,我尝试了这样的方法:

echo "[%L10n.msg('foo')%]" | sed -n -e '/[%L10n.msg(\'/,/\')%]/p'

但我收到错误

bash:意外标记“)”附近出现语法错误

更新: 想象一下我的字符串可以在这个字符串中:

Some ' very [%% ]long ' text [%L10n.msg('foo')%] with lot of [%characters%]

测试文件:

Some ' very [%% ]long ' text [%L10n.msg('foo')%] with lot of [%characters%]
fefe
          <a class="w3-bar-item w3-button" href='/html/html_examples.asp'>HTML Examples</a>

          <a class="w3-bar-item w3-button" href='/html/html_exercises.asp'>HTML Exercises</a>

fefrheerghirlg wgwa g [%L10n.msg('foo')%]


<>"

答案1

怎么样

$ echo "[%L10n.msg('foo')%]" | sed "s/\[%L10n.msg('//; s/')%]//"
foo

或者,使用您的新输入样本,

echo "Some ' very [%% ]long ' text [%L10n.msg('foo')%] with lot of [%characters%]" | sed "s/^.*\[%L10n.msg('//; s/')%].*$//"
foo

或者,第二次更改输入(读取测试文件现在),尝试

sed -n "/^.*\[%L10n.msg('/ {s///; s/')%].*$//;p}" file
foo
foo

相关内容