以下があります。
oid=.1.3.6.1.4.1.795.2.5.0.xxx (these 0.xxx represent any random numeral)
私は次のことをしたい
echo $oid | sed (some commands to remove 0.xxx)
結果の文字列を保存します
.1.3.6.1.4.1.795.2.5
oIDで。
Grep、awk、またはsedを使用してこれを実行してもかまいません。
0.xxxの前のすべてが変更できるのは、静的なものだけが0になることです。
ご協力いただきありがとうございます!
Bashの パラメーター拡張 :
oid=".1.3.6.1.4.1.795.2.5.0.xxx"
oid="${oid%.0.*}"
echo "$oid"
出力:
。1.3.6.1.4.1.795.2.5
これが一般的なフォームであると言ったように、テキスト(.0.xxx)から最後の6文字を削除したいので、これを使用できます:
echo ".1.3.6.1.4.1.795.2.5.0.xxx" |sed 's/.\{6\}$//'
次に、変数で使用する場合:
oid=.1.3.6.1.4.1.795.2.5.0.xxx
次に:
echo $oid | sed 's/.\{6\}$//'
出力は次のとおりです。
.1.3.6.1.4.1.795.2.5
echo "${oid:0:${#oid}-6}"
echo $oid | cut -d '.' -f -10
sed
を使用:
oid="$(echo -n .1.3.6.1.4.1.795.2.5.0.0 | sed -r 's/\.0\.[0-9]+$//')"
-r
:sed
がERE
(拡張正規表現)パターンを解釈するようにします
sed
コマンドの詳細:
s
:置換を実行するようにアサートします/
:パターンを開始します\.
:.
文字に一致0
:0
文字に一致\.
:.
文字に一致[0-9]+
:1桁以上の数字に一致$
:行末に一致/
:パターンを停止/置換文字列を開始/
:置換文字列を停止する/修飾子を開始するawk
を使用する
oid=".1.3.6.1.4.1.795.2.5.0.xxx"
awk -F'.' '{for (i=2;i<=NF-2;i++) {printf "%s","."$i} }' <<< "$oid"
またはすべてを1つに
awk -F'.' '{for (i=2;i<=NF-2;i++) {printf "%s","."$i} }' <<< ".1.3.6.1.4.1.795.2.5.0.xxx"
出力
.1.3.6.1.4.1.795.2.5
簡単な説明
NF-2
–最後の2つの要素を除くすべての要素
grep
を使用:
_grep -Po '.*(?=\.0\.\d+$)'
_
テスト:
_$ oid='.1.3.6.1.4.1.795.2.5.0.908'
$ oid="$(grep -Po '.*(?=\.0\.\d+$)' <<<"$oid")"
$ echo "$oid"
.1.3.6.1.4.1.795.2.5
_
_grep -P
_は、PCREを使用できるようにします
_grep -o
_は一致した部分のみを出力します
.*(?=\.0\.\d+$)
は、_.0
_の前のすべての文字に一致し、その後に_.
_と最後に任意の桁数が続きます。