在bash中找到一行中的特定字符

时间:2012-07-10 12:21:43

标签: regex linux bash shell

有没有办法在bash中使用正则表达式从一行文本中提取特定部分。

例如

8495 pts/1 S 0:10 /opt/sbin/proc -q 10 -p /opt/etc/plugin/ -c /opt/etc/ -f 200000 -s 10000 -b 3276

如何从上面提取q参数 10 ?我需要q参数之后的数字

3 个答案:

答案 0 :(得分:2)

px aux | sed -n 's/.*-q\s\([0-9]\+\).*/\1/p'

答案 1 :(得分:0)

天真的解决方案正则表达式为.*-q ([^ ]*) .*。所以,sed 's/.*-q ([^ ]*) .*/\1/'之类的东西应该可以解决问题。

答案 2 :(得分:0)

如果该行存储在变量$line中:

val=$(
    this_token=false 
    for word in $line; do 
        $this_token && { echo $word; break; } 
        [[ $word = "-q" ]] && this_token=true 
    done
) 
echo $val