特定の範囲のテキストを特殊文字を含む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
答え2
awkを使用してください:
awk -F\" '{print $2,$5}' file