我编码在外壳(bash)的,我的剧本是这样的:如何获得我给出的字符串后的字符串?
ps aux | grep something
,其结果是:
something sds fgdsg -name i_want_this_string sdaf gfdsg dfgdf
我想要得到的字符串 “i_want_this_string”,以及位置这个字符串不是固定的,它总是跟着“-name”和空格,所以我不能使用awk。
那么如何获取字符串呢?谢谢〜
我编码在外壳(bash)的,我的剧本是这样的:如何获得我给出的字符串后的字符串?
ps aux | grep something
,其结果是:
something sds fgdsg -name i_want_this_string sdaf gfdsg dfgdf
我想要得到的字符串 “i_want_this_string”,以及位置这个字符串不是固定的,它总是跟着“-name”和空格,所以我不能使用awk。
那么如何获取字符串呢?谢谢〜
使用grep
:
echo "$x"|grep -oP '\-name\s\K\w[^ ]+'
i_want_this_string
其中"$x"
认为:something sds fgdsg -name i_want_this_string sdaf gfdsg dfgdf
用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
或使用... SED:
$ echo "something sds fgdsg -name i_want_this_string sdaf gfdsg dfgdf" | sed 's/^.*name \(\S*\) .*$/\1/'
i_want_this_string
[email protected]:/$ ps_aux="something sds fgdsg -name i_want_this_string sdaf gfdsg dfgdf"
[email protected]:/$ echo $ps_aux
something sds fgdsg -name i_want_this_string sdaf gfdsg dfgdf
对于可变的grep,这个简单的情况下,不需要OFC ,但由于您在多个字符串中搜索,我们应该添加grep以消除不相关的字符串。
Sed会把所有东西都吃掉直到找到“-name”。据我所知,输出中不需要“-name”,所以也要吃。
[email protected]:/$ echo $ps_aux | grep "\-name" | sed -e "s/.*-name //g"
i_want_this_string sdaf gfdsg dfgdf
好,但需要切掉所需字符串后的所有内容。让我们使用分隔符作为“空间”,并采取一个字符串的第一个切割。
[email protected]:/$ echo $ps_aux | grep "\-name" | sed -e "s/.*-name //g" | cut -f1 -d' '
i_want_this_string
[email protected]:/$
纯shell脚本(使用参数扩展)假设没有 空间在-name
选项的参数:
n=$(ps aux | grep something)
n="${n#*-name }"
n="${n%% *}"
echo "$n"
如果有可能是空格,(即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
或'的ps aux | grep'/ something/{print $ 5}'作为给定*的输出*。但是,考虑到各种操作系统中'ps'的输出格式的潜在差异,''-name'的位置和下一个字段的处理更加健壮。 –
@ DavidC.Rankin OP确实说过这个字符串的位置并不固定,它总是跟着“-name”_,我发现它很奇怪。 –