我在shell(bash)编码,我的脚本是这样的:
ps aux | grep something
结果是:
something sds fgdsg -name i_want_this_string sdaf gfdsg dfgdf
我想得到字符串“i_want_this_string”,并且该字符串的位置不固定,并且后面跟着“-name”后跟空格,所以我不能使用awk。
那么如何获取字符串?谢谢〜
答案 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)
纯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