これは文字列(シェル変数の値)です。
2908104 /var/cache/yum/x86_64/7Server/Patches/gen
予想出力:
/var/cache/yum/x86_64/7Server/Patches/gen
最初の/で始まる値のみを取得するにはどうすればよいですか?私はsedに初めてアクセスし、Linuxを初めて使用します。
ベストアンサー1
Linuxをカーネルとして使用するシステムgrep
(RHELのGNUおよび他の一般的なGNU / Linuxディストリビューション、ほとんどのLinuxベースのシステムのbusybox、Androidのtoybox)では、一般的な実装で次のことができます。
LC_ALL=C grep -o '/.*' <input
/
複数の行がある場合は、最初の行から始めて部分を印刷します。
POSIX的に:
LC_ALL=C sed -n 's|^[^/]*/|/|p' <input
文字列がPOSIX様シェル(sh
実際にはbash
POSIXモードのRHEL)のシェル変数に格納されている場合。
new_string=${string#"${string%%/*}"}
(何も含まれていない場合は$new_string
空です)$string
/
${string%%/*}
最長一致サフィックスを削除します/*
。結果は、${string#pattern}
そのパターンに一致する最短の接頭辞が削除されたパターンと見なされます。ここでは${string%%/*}
、引用したようにパターンではなくリテラル文字列として扱います。
を使用すると、zsh
次の操作も実行できます。
new_string=${(M)string%%/*}
とともにM
パラメータ拡張フラグ、これらすべての${string#pattern}
(または##
、、、:#
)演算子は、一致する部分を削除せずに追加の%
部分(それなしで削除される部分)に拡張します。%%
M
/以外の文字をすべて削除することもできます。
zsh
:set -o extendedglob new_string=${string##[^/]#}
ksh93
/bash -O extglob
:new_string=${string##*([^/])}
ここでX#
、(zsh)または(ksh)はゼロ個以上のsと一致し、これは上記の正規表現*(X)
と同じです。X
X*
grep
sed
1はスマート電球、テレビ、またはネットワークデバイスに組み込まれることが多いため、エンドユーザーはシェルやユーティリティ(存在する場合)と対話することはほとんどありません。