在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
我也试过了,不使用\]
:
*
但正则表达式无法匹配,并返回$
的所有字符串......
答案 0 :(得分:1)
*
不匹配任何字符串。 sed 's/.*key=\[\([^]]*\)\].*/\1/'
是一个量词,表示"前一个可以重复零次或多次"。你需要一个sed的正则表达式,而不是通配符模式:
\(...\)
\1
,引用为[^]]*
(因为它是第一个此类组)]
表示"除了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;以外的任何内容,因此它匹配方括号内的字符串