この場合、名前と姓をどのように変更しますか?

この場合、名前と姓をどのように変更しますか?

次のような行が多いファイルを取得します。

Vinh Tranh:438-910-7449:8235 Maple Street, Wilmington, VM 29085:9/23/63:68900

姓の姓、姓、名前の順序を変更する必要があります。ここまで来ましたが、まだエラーが発生します。

sed -e "s/\([^ ]*\) *\(^ ]*\)/\2 \1 /g" datebook

ただし、次のように出力されます。

Tranh:438-910-7449:8235 Vinh Maple Street...

変える

Tranh, Vinh:438-910...

ベストアンサー1

編集する:私はもともと質問を誤解し、ほぼ正しいBRE構文を使用したことを見ませんでした。その意味は…

正規表現にはいくつかの問題があります。

  • 2番目のキャプチャグループにはありません[(たとえこれがなければ取得できないいくつかの出力を投稿したため、これは単に記録の問題かもしれませんが[)。
  • 2番目のキャプチャグループと2番目の単語のみを一致させるには、最初のコロンの前の最後の文字を一致させようとします。つまり、:2番目のキャプチャグループから除外したいということです。
  • g最初のゲームにのみ興味があるので、最終フラグは必要ありません。これを含めると、sed表現を残りの行と一致させようと試みて混乱する可能性があります。

ちなみに、sedオプションではなく引数を2つだけ指定したため、この-eオプションは必須ではありません。最初のオプションではない引数は、解釈されるスクリプトとして扱われます。

修正されたコマンドバージョン:

sed -e "s/\([^ ]*\) *\([^ :]*\)/\2, \1/"

(逆参照の後の空白を削除し、提供された出力例と一致するように、\1その後にコンマを追加しました)。生のテキストに適用すると結果が表示されます。\2

$ echo "Vinh Tranh:438-910-7449:8235 Maple Street, Wilmington, VM 29085:9/23/63:68900" |
sed -e "s/\([^ ]*\) *\([^ :]*\)/\2, \1/"
Tranh, Vinh:438-910-7449:8235 Maple Street, Wilmington, VM 29085:9/23/63:68900

おすすめ記事