コマンド出力から引用符付き文字列の内容を抽出する方法は?

コマンド出力から引用符付き文字列の内容を抽出する方法は?

私の出力はVBoxManage list vms次のとおりです

"arch" {de1a1db2-86c5-43e7-a8de-a0031835f7a7}   
"arch2" {92d8513c-f13e-41b5-97e2-2a6b17d47b67}  

名前を取得してarch変数arch2に保存する必要があります。

ベストアンサー1

grep + sedを使う

これにより、次の2つの文字列の内容が解析されます。

$ grep -o '".*"' somefile | sed 's/"//g'
arch
arch2

上記のコードはパターンに一致する文字列を探します".*"。これは二重引用符内のすべての項目と一致します。したがって、grep次の型の値が返されます。

"arch"
"arch2"

Pipe toは、sedこれらの文字列からすべての二重引用符を削除して、必要な文字列を提供します。この記号は、すべての二重引用符を検索して何もないものに置き換えることをsed 's/"//g'示します。そのコマンドはそこで起こるものであり、検索の尾は与えられた文字列全体に対してグローバルにこれを行うように指示します。seds/"//gs/find/replace/gg

ただsedを使う

また、それを使用してsed開く二重引用符を切り取り、それらの間にある内容を保持し、残りの引用符とその後のすべての内容を切り取ることもできます。

$ sed 's/^"\(.*\)".*/\1/' a
arch
arch2

他の方法

$ grep -o '".*"' somefile | tr -d '"'
arch
arch2

このコマンドはtr文字を削除するために使用できます。この場合、二重引用符を削除します。

$ grep -oP '(?<=").*(?=")' somefile
arch
arch2

PCRE関数を使用すると、grep二重引用符で始まるか、二重引用符で終わり、部分文字列のみを報告するすべての部分文字列を見つけることができます。

おすすめ記事