如何通过sed获取“=”分隔符之后的第二个单词(字符串)(需要忽略空格)
例如
echo " bla bla word word1 = strin1 string2 " | sed .....
我应该得到string2
另一个例子
echo " bla bla word word1 =swhsw 123 " | sed .....
我应该得到123
答案 0 :(得分:12)
我相信awk
是一个更好的解决方案,只需使用。
echo "bla bla word word1 = strin1 string2" | awk -F"=" '{print $2}' | awk '{print $2}'
答案 1 :(得分:6)
$ echo " bla bla word word1 = strin1 string2 " | sed 's/.[^=]*=\(.[^ \t]*\)[ \t]*\(.[^ \t]*\)\(.*\)/\2/'
string2
$ echo " bla bla word word1 =swhsw 123 " | awk -F"=" '{split($2,a," ");print a[2]}'
123
那你怎么开始阅读如何使用sed/awk?
答案 2 :(得分:3)
这个答案纯粹是GNU SED:
export text=" bla bla word word1 = string1 string2 string3 ";
echo "$text" | sed 's/.*= \?[a-zA-Z0-9]* \([a-zA-Z0-9]*\).*/\1/';
我改变了一点字符串因为可能有更多的单词,如果那个单词不是最后一个,规则就会改变。
让我们解释一下:
.*=
:等号前的所有字符。.*= /?
:这是主要部分,等于我留空
空间和我把/?,这意味着一个或零的发生,不知道
如果你在这里留一个空间。[a-zA-Z0-9]*
a-z A-Z 0-9的所有发生,单词(string1)。 \([a-zA-Z0-9]*\)
再次获得a-zA-z0-9的所有货币,第二个字。\).*
所有其他的东西。/\1/
将输出您在\(\)。我希望这有助于某人。