sed:リバースパターンの置換

sed:リバースパターンの置換

次のファイルがあります.txt

ABC Corp
1234 7 Oaks Lane
Denton; TX 76509-4321
(682) 543-7890

コマンドを使用して、郵便番号の最後の4桁を逆に変更する必要がありますsed。出力例:

ABC Corp
1234 7 Oaks Lane
Denton; TX 76509-1234
(682) 543-7890

郵便番号の前にテキストがあり、その間にダッシュがある3行目です。したがって、3行目のダッシュ以降のすべてです。郵便番号が完全に独立している場合にのみこれを実行できます。私は試した:

sed -i -e 's/([0-9])([0-9])([0-9])([0-9])([0-9])-([0-9])([0-9])([0-9])([0-9])/\9\8\7\6/' test.txt

ただし、これを行うと、元に戻して他のすべてのアイテムが削除されます。

ベストアンサー1

まず、その行に固有のいくつかのパターンを見つけて、コマンドを単純化できます。次の例では、セミコロンが解析される行;に固有であると仮定します(少なくとも例のテキストでは)sed

# capture the last 4 digits of the line and substitute them in reverse order
$ sed '/;/s/\(.\)\(.\)\(.\)\(.\)$/\4\3\2\1/'
ABC Corp
1234 7 Oaks Lane 
Denton; TX 76509-1234
(682) 543-7890

おすすめ記事