我想从中提取 word1:
something /CLIENT_LOGIN:word1 something else
我想在匹配模式 /CLIENT_LOGIN:
后提取第一个单词。
没有斜杠,像这样的东西可以工作:
A=something /CLIENT_LOGIN:word1 something else
B=$(echo $A | awk '$1 == "CLIENT_LOGIN" { print $2 }' FS=":")
尽管有斜杠,我无法让它工作(我尝试将 /
和 \/
放在 CLIENT_LOGIN
前面)。我不在乎用 awk
, grep
, sed
, ...
最佳答案
使用sed
:
s='=something /CLIENT_LOGIN:word1 something else'
sed -E 's~.* /CLIENT_LOGIN:([^[:blank:]]+).*~\1~' <<< "$s"
word1
详细信息:
- 我们在
sed
中使用~
作为正则表达式分隔符 /CLIENT_LOGIN:([^[:blank:]]+)
匹配/CLIENT_LOGIN:
后跟在第 1 组中捕获的 1+ 个非空白字符.*
匹配我们匹配前后的文本\1
用于替换以将第一组捕获的值放回输出
关于regex - 用斜线捕获模式后的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71431220/