2

行がイタリア語で終わるファイルがあります[aiou]'

gia'
giacche'
giovedi'
giu'

これらの行をautohotkeyコマンドに置き換えて、これらの単語をアポストロフィで記述し、正しいバージョンに自動的に翻訳できるようにしたい、つまり、

::gia'::già
::giacche'::giacché
::giovedi'::giovedì
::giu'::giù

私はsedでこれを達成できることを知っていますが、それを機能させることができませんでした。行全体を格納する変数があることは知っていますが、見つかりません。それが@次の場合はうまくいくかもしれません

sed -e "s/.a'/::@::@\b\bà/" temp
sed -e "s/.i'/::@::@\b\bì/" temp
sed -e "s/.o'/::@::@\b\bò/" temp
sed -e "s/.u'/::@::@\b\bù/" temp

行はアルファベット順になっていますが、すべてがgで始まるわけではなく、単語の最後の2文字にパターンがないことに注意してください。

それで、私が探している変数が何であるか知っていますか?私が試している問題よりも、私の問題に対するより良い解決策があると思いますか?

4

2 に答える 2

3

探している変数はです&。おそらく次のようなものです:

sed -e "s/\(.*\)a'/::&::\1à/" temp

5つの母音すべてについて、すべてのコマンドをつなぎ合わせることができます。

sed -e "s/\(.*\)a'/::&::\1à/" -e "s/\(.*\)e'/::&::\1é/" -e "s/\(.*\)i'/::&::\1ì/" -e "s/\(.*\)o'/::&::\1ò/" -e "s/\(.*\)u'/::&::\1ù/" temp

あなたが持っている場合GNU sed

sed -re "s/(.+)a'/::&::\1à/" -e "s/(.+)e'/::&::\1é/" -e "s/(.+)i'/::&::\1ì/" -e "s/(.+)o'/::&::\1ò/" -e "s/(.+)u'/::&::\1ù/" temp
于 2012-10-18T13:09:52.167 に答える
2

これはあなたのために働くかもしれません(GNU sed):

sed -r '1{x;s/^/aàeéiìoòuù/;x};/[aeiou]'\''$/!b;G;s/((.*)(.).)\n.*\3(.).*/::\1::\2\4/' file

説明:

  • 1{x;s/^/aàeéiìoòuù/;x}ファイルの先頭にあるホールドスペース(HS)にルックアップテーブルを格納します
  • /[aeiou]'\''$/!b目的の単語が終了しない限り、保釈します
  • G改行とHSの内容をパターンスペース(PS)に追加します
  • s/((.*)(.).)\n.*\3(.).*/::\1::\2\4/元の単語の最後の1文字を、追加されたルックアップテーブルのルックアップとして使用し、必要な出力を生成します
于 2012-10-18T14:53:08.867 に答える