在bash脚本

时间:2018-05-24 11:46:10

标签: regex bash shell sed

在bash脚本中,我想提取key=[value]形式的子字符串,以便通过指定相应的value来获取变量中的key。 / p>

例如,给定此变量txt

txt="something... key=[value] number=[0.42] ...other things... text=[foo] etc"

我想提取value的{​​{1}},key的{​​{1}},0.42的{​​{1}}和空字符{ {1}}缺少密钥。

我尝试了这个命令来提取number

foo

如果我理解得很好,命令text会尝试匹配以下正则表达式:

行的开头

value任何事情

echo "$txt" | sed 's/^*key=\[[*]\]*/\1/' 我想要找到的开始

sed "s/regexp/replacement/"匹配任何内容,但字符^

除外

*我希望找到的结尾

key=\[任何事情

[*^\[]行的结尾

并将其替换为匹配的内容(由于[)。

但是由于收到以下错误消息,我遗漏了一些内容: sed:-e表达式#1,字符27:无效的引用\ 1在`s'命令的RHS

我也试过了,不使用\]

*

但正则表达式无法匹配,并返回$的所有字符串......

1 个答案:

答案 0 :(得分:1)

*不匹配任何字符串。 sed 's/.*key=\[\([^]]*\)\].*/\1/' 是一个量词,表示"前一个可以重复零次或多次"。你需要一个sed的正则表达式,而不是通配符模式:

\(...\)
    创建捕获组需要
  • \1,引用为[^]]*(因为它是第一个此类组)
  • ]表示&#34;除了library(shiny) library(dplyr) library(reshape2) library(tidyr) library(DT) ui <- fluidPage( headerPanel("Summary Table"), sidebarPanel(selectInput("row", "Row variable", names(mtcars), selected = "vs", multiple = T), selectInput("col", "Column variable", names(mtcars), selected = "gear")), mainPanel(DT::dataTableOutput('table')) ) server <- function(input, output) { output$table <- renderDataTable({ car0 <- mtcars %>% select(input$row,input$col,cyl)%>% group_by_at(., vars(input$row, input$col))%>% summarize(n = n_distinct(cyl))%>% tidyr::spread(input$col,n) datatable(car0) }) } shinyApp(ui, server) 零次或多次&#34;以外的任何内容,因此它匹配方括号内的字符串