如何在我给出的字符串后得到一个字符串?

时间:2017-07-25 04:08:54

标签: linux bash shell

我在shell(bash)编码,我的脚本是这样的:

ps aux | grep something

结果是:

something sds fgdsg -name i_want_this_string sdaf gfdsg  dfgdf

我想得到字符串“i_want_this_string”,并且该字符串的位置不固定,并且后面跟着“-name”后跟空格,所以我不能使用awk。

那么如何获取字符串?谢谢〜

5 个答案:

答案 0 :(得分:2)

使用<section> <img src="if_60-rss_104443.png"> </section>

grep

其中echo "$x"|grep -oP '\-name\s\K\w[^ ]+' i_want_this_string 成立:"$x"

答案 1 :(得分:1)

使用awk:

$ echo something sds fgdsg -name i_want_this_string sdaf gfdsg  dfgdf | awk '
/something/ {
    for(i=1;i<=NF;i++)
        if($i=="-name") {
        print $(i+1)
        exit
    }
}'
i_want_this_string

答案 2 :(得分:0)

或...使用sed:

$ echo "something sds fgdsg -name i_want_this_string sdaf gfdsg  dfgdf" | sed 's/^.*name \(\S*\) .*$/\1/'

i_want_this_string

答案 3 :(得分:0)

# Reshaping data
train_data = train_data.reshape(50000, 3, 32, 32).transpose(
    0, 2, 3, 1).astype("uint8")
test_data = test_data.reshape(10000, 3, 32, 32).transpose(
    0, 2, 3, 1).astype("uint8")

对于这个简单的变量grep的情况不需要ofc,但由于你在多个字符串中搜索,我们应该添加grep来消除不相关的字符串。
Sed会吃掉所有东西,直到找到&#34; -name&#34;。据我了解&#34; -name&#34;在输出中不需要,所以也要吃它。

cs-server@csserver-HP-EliteDesk-800-G2-SFF:/$ ps_aux="something sds fgdsg -name i_want_this_string sdaf gfdsg  dfgdf"
cs-server@csserver-HP-EliteDesk-800-G2-SFF:/$ echo $ps_aux
something sds fgdsg -name i_want_this_string sdaf gfdsg dfgdf

很好,但需要在需要的字符串后删除所有内容。让我们使用切割器,使得挡板是空间&#34;空间&#34;并取第一个字符串。

cs-server@csserver-HP-EliteDesk-800-G2-SFF:/$ echo $ps_aux | grep "\-name" | sed -e "s/.*-name //g"
i_want_this_string sdaf gfdsg dfgdf

答案 4 :(得分:0)

  1. 纯shell脚本(使用参数扩展)假设没有 -name选项参数中的空格:

    n=$(ps aux | grep something) 
    n="${n#*-name }"
    n="${n%% *}"
    echo "$n"
    
  2. 如果可能是空格(即something sds fgdsg -name "i want this string" sdaf gfdsg dfgdf),这应该是 工作:

    set -- $(ps aux | grep something)
    while [ "$1" ] ; do
        if [ "$1" = "-name" ] ; then
            echo "$2"
            break 
        fi
        shift
    done