首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用sed识别括号中的字符串?

如何使用sed识别括号中的字符串?
EN

Stack Overflow用户
提问于 2014-02-21 10:55:59
回答 6查看 109关注 0票数 0

我想找到放在括号中的字符串。如何使用sed来拉动字符串?

代码语言:javascript
复制
# cat /sys/block/sdb/queue/scheduler
noop anticipatory deadline [cfq]

我没有得到确切的结果

代码语言:javascript
复制
# cat /sys/block/sdb/queue/scheduler | sed 's/\[*\]//'
noop anticipatory deadline [cfq

我期待着一个输出

代码语言:javascript
复制
cfq
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-02-21 11:00:02

如果grep恰好改变了方括号中的文本所在的位置,那么使用它会更容易:

代码语言:javascript
复制
$ grep -Po '(?<=\[)[^]]*' file
cfq

这是向前看:每当您找到一个字符串[时,开始将所有字符提取到一个]中。

另见另一个例子:

代码语言:javascript
复制
$ cat a
noop anticipatory deadline [cfq]
hello this [is something] we want to [enclose] yeah

$ grep -Po '(?<=\[)[^]]*' a
cfq
is something
enclose

您也可以为此使用awk,以防它总是处于相同的位置:

代码语言:javascript
复制
$ awk -F[][] '{print $2}' file
cfq

它将字段分隔符设置为[]。然后印出第二张。

以及使用sed

代码语言:javascript
复制
$ sed 's/[^[]*\[\([^]]*\).*/\1/g' file
cfq

它有点混乱,但基本上它是从[]之间的文本块中查找并打印回来的。

票数 2
EN

Stack Overflow用户

发布于 2014-02-21 11:01:20

我找到了一个可行的解决办法-

代码语言:javascript
复制
cut -d "[" -f2 | cut -d "]" -f1

所以确切的解决办法是

代码语言:javascript
复制
# cat /sys/block/sdb/queue/scheduler | cut -d "[" -f2 | cut -d "]" -f1
票数 0
EN

Stack Overflow用户

发布于 2014-02-21 11:06:00

另一个可能的解决办法是awk:

代码语言:javascript
复制
s='noop anticipatory deadline [cfq]'
awk -F'[][]' '{print $2}' <<< "$s"
cfq
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21932435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档