sed を使用してテキスト範囲を特殊文字に置き換える

sed を使用してテキスト範囲を特殊文字に置き換える

特定の範囲のテキストを特殊文字を含むsedに置き換えようとしています。

次の出力があります。

"Users" "/Users/Users"   SERVER1
"Roaming Profiles" "/Roaming Profiles/Roaming Profiles"   SERVER2

私はこれが次のようになりたい:

Users SERVER1
Roaming Profiles SERVER2

ベストアンサー1

$ sed -r 's/"([^"]*)"([^"]*"){2}[[:space:]]*/\1 /' file
Users SERVER1
Roaming Profiles SERVER2

どのように動作しますか?

sed 置換コマンドには、次のs/old/new/形式の正規表現があります。old

  • "([^"]*)" - 引用符の最初の文字列と一致してグループ1に保存されます。

  • ([^"]*"){2} - 2番目に引用された文字列(前のスペースを含む)と一致します。

  • [[:space:]]* - 2番目に引用された文字列の後のスペースと一致します。

正規表現はnew簡単です\1。スペースの後には、角かっこで最初に引用された文字列が続きます。これをグループ1に保存します。

Mac OSXまたは他のBSDプラットフォーム

OSXでは、次のことを試してみてください。

sed -E 's/"([^"]*)"([^"]*"){2}[[:space:]]*/\1 /' file

おすすめ記事