我編碼在外殼(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」_,我發現它很奇怪。 –