真の引用符を丸い引用符に置き換える方法

真の引用符を丸い引用符に置き換える方法

まっすぐな一重引用符と二重引用符を二重引用符(‘ ’、)に置き換えたいと思います。“ ”シェルコマンドを使用してこれをどのように実行できますか?

答え1

この入力ファイルを使用してください(提供:やけど):

$ cat file
When 'chapmen billies' lea "the street" and 'drouthy' neebors "neebors" meet.

そしていくつかの奇妙な:

awk '{
    while ( match($0,/\047[^\047]*\047/) ) {
        $0 = substr($0,1,RSTART-1) "‘" substr($0,RSTART+1,RLENGTH-2) "’" substr($0,RSTART+RLENGTH)
    }
    while ( match($0,/"[^"]*"/) ) {
        $0 = substr($0,1,RSTART-1) "“" substr($0,RSTART+1,RLENGTH-2) "”" substr($0,RSTART+RLENGTH)
    }
    print
}' file
When ‘chapmen billies’ lea “the street” and ‘drouthy’ neebors “neebors” meet.

上記は、引用符が常にペアで来ると仮定しています。

答え2

UTF perl-8 ロケール:

perl -C -0777 -pi.back -e '
  s/\N{QUOTATION MARK}(.*?)\N{QUOTATION MARK}/\N{LEFT DOUBLE QUOTATION MARK}$1\N{RIGHT DOUBLE QUOTATION MARK}/gs;
  s/\N{APOSTROPHE}(.*?)\N{APOSTROPHE}/\N{LEFT SINGLE QUOTATION MARK}$1\N{RIGHT SINGLE QUOTATION MARK}/gs
  ' your-files

(元のバックアップにはサフィックスが付いています.back.backバックアップが気に入らない場合は削除してください。)

関連情報