regex - 用斜线捕获模式后的单词

标签 regex awk sed grep

我想从中提取 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/

相关文章:

linux - 查找文件中 0 到 1000 之间的不同组

linux - 如何使用 awk、sed、剪切、粘贴 (Unix/Linux) 偏移 CSV 文件中的字段?

unix - 仅当找到匹配字符串时才替换行的最后一个单词

linux - 使用 sed 重命名多个文件

regex - vim 语法匹配错误([A-Z] 匹配所有字母字符)

regex - Logstash grok 多行消息

javascript - Regex JS - 创建没有指定单词的捕获模式

linux - 如何在系统命令中使用 awk 脚本的 shell 变量?

.net - 正面回顾和重复模式的问题

linux - 如何删除字符串输出的前两个单词