我想找到放在括号中的字符串。如何使用sed来拉动字符串?
# cat /sys/block/sdb/queue/scheduler
noop anticipatory deadline [cfq]我没有得到确切的结果
# cat /sys/block/sdb/queue/scheduler | sed 's/\[*\]//'
noop anticipatory deadline [cfq我期待着一个输出
cfq发布于 2014-02-21 11:00:02
如果grep恰好改变了方括号中的文本所在的位置,那么使用它会更容易:
$ grep -Po '(?<=\[)[^]]*' file
cfq这是向前看:每当您找到一个字符串[时,开始将所有字符提取到一个]中。
另见另一个例子:
$ cat a
noop anticipatory deadline [cfq]
hello this [is something] we want to [enclose] yeah
$ grep -Po '(?<=\[)[^]]*' a
cfq
is something
enclose您也可以为此使用awk,以防它总是处于相同的位置:
$ awk -F[][] '{print $2}' file
cfq它将字段分隔符设置为[和]。然后印出第二张。
以及使用sed
$ sed 's/[^[]*\[\([^]]*\).*/\1/g' file
cfq它有点混乱,但基本上它是从[]之间的文本块中查找并打印回来的。
发布于 2014-02-21 11:01:20
我找到了一个可行的解决办法-
cut -d "[" -f2 | cut -d "]" -f1所以确切的解决办法是
# cat /sys/block/sdb/queue/scheduler | cut -d "[" -f2 | cut -d "]" -f1发布于 2014-02-21 11:06:00
另一个可能的解决办法是awk:
s='noop anticipatory deadline [cfq]'
awk -F'[][]' '{print $2}' <<< "$s"
cfqhttps://stackoverflow.com/questions/21932435
复制相似问题