web-dev-qa-db-ja.com

sedは最後の2桁を削除します

以下があります。

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になることです。
ご協力いただきありがとうございます!

3
SamFlynn

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 
8
Cyrus

これが一般的なフォームであると言ったように、テキスト(.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}"

Cutと '。'を使用する別のソリューションデリミターとして

echo $oid | cut -d '.' -f -10
4
Maythux

sedを使用:

oid="$(echo -n .1.3.6.1.4.1.795.2.5.0.0 | sed -r 's/\.0\.[0-9]+$//')"

-rsedERE(拡張正規表現)パターンを解釈するようにします

sedコマンドの詳細:

  • s:置換を実行するようにアサートします
  • /:パターンを開始します
  • \..文字に一致
  • 00文字に一致
  • \..文字に一致
  • [0-9]+:1桁以上の数字に一致
  • $:行末に一致
  • /:パターンを停止/置換文字列を開始
  • /:置換文字列を停止する/修飾子を開始する
4
kos

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つの要素を除くすべての要素

1
A.B.

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_の前のすべての文字に一致し、その後に_._と最後に任意の桁数が続きます。

1
heemayl