如何获取sed之后的"="分隔符后的第二个单词(字符串)(需要忽略空格)
例如
echo " bla bla word word1 = strin1 string2 " | sed .....
Run Code Online (Sandbox Code Playgroud)
我应该得到string2
另一个例子
echo " bla bla word word1 =swhsw 123 " | sed .....
Run Code Online (Sandbox Code Playgroud)
我应该得到123
And*_*ers 12
我相信这awk是一个更好的解决方案,只需使用.
echo "bla bla word word1 = strin1 string2" | awk -F"=" '{print $2}' | awk '{print $2}'
Run Code Online (Sandbox Code Playgroud)
$ 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
Run Code Online (Sandbox Code Playgroud)
你怎么开始阅读如何使用sed/awk?
这个答案是纯粹的 GNU SED:
export text=" bla bla word word1 = string1 string2 string3 ";
echo "$text" | sed 's/.*= \?[a-zA-Z0-9]* \([a-zA-Z0-9]*\).*/\1/';
Run Code Online (Sandbox Code Playgroud)
我稍微改变了字符串,因为可能有更多单词,如果该单词不是最后一个,规则就会改变。
让我们解释一下:
.*=: 等号之前的所有字符。.*= /?:这是主要部分,等于后我留了一个空格,然后我放了/?,这意味着出现一次或零次,不知道你是否会在这里留一个空格。[a-zA-Z0-9]*az AZ 0-9 中出现的所有单词(字符串 1)。\([a-zA-Z0-9]*\)再次获取 a-zA-z0-9 的所有出现次数,即第二个单词。\).*所有其他的东西。/\1/将输出您之间的所有内容\(\)。我希望这对某人有帮助。