テキストファイルの特定の単語を置き換えるには、sedスクリプトヘルプが必要です。

テキストファイルの特定の単語を置き換えるには、sedスクリプトヘルプが必要です。

sed私はルーマニア語のテキストや他の適切なUnixツールを使って特定のテキスト置換操作を自動化したいと思います。これは私の要件です。

  1. 文字のすべてのインスタンスを内部単語âに置き換えます。î
  2. 語根が「român」の単語(「Românească」、「româneşte」など)は、変更されていないままにしてください。
  3. 「sunt」という単語は「sînt」に置き換える必要があります。

たとえば、

入力する:

până
împământenit
român
Românească
sunt
cugetând

予想出力:

pînă
împămîntenit
român
Românească
sînt
cugetînd

複数のスクリプトを試しましたが、sedどちらも同時にすべての要件を満たしていませんでした。誰でも私を案内できますか?どんな助けやアドバイスにも感謝します!

答え1

説明したように、

sed '/[rR]omân/!s/â/î/g;s/sunt/sînt/g'

次の作業が完了します。

  • s/â/î/gubstitureがsすべて(g部分的に)表示されるâかどうかî
  • 「アドレス」/[rR]omân/が逆!のため、このパターンを含む行では、次のコマンドは機能しません。
  • s/sunt/sînt/g結局、成分の一部として単語を置き換えました。

注:あなたの例ではă交換されます。これが必要な場合

sed '/[rR]omân/!s/[âă]/î/g;s/sunt/sînt/g'

答え2

使用幸せ(以前のPerl_6)

~$ raku -ne 'S:g/â/î/ andthen                                  \
             S:samecase:g/ (<[rR]>om) (î) (n) /$0â$2/ andthen  \
             S:g/sunt/sînt/ andthen .put;'    file

入力例:

până
împământenit
român
Românească
sunt
cugetând

出力例:

pînă
împămîntenit
român
Românească
sînt
cugetînd

-neRakuには自動印刷ではなくコマンドラインフラグがあります。入れ替わると、楽の「big-S」のS///表記が使えます結果文字列を返す

andthenトピック変数()はコネクタの上に再ロードされるため、$_各後続のS///操作は以前に変更されたテキストに適用されます。最後の句はandthen .putトピック変数($_)を再ロードし、最後のテキスト(.putyesの略語$_.put)を印刷します。

特殊文字の切り取りや貼り付けの時間を節約するために、Unicode名を使用することをお勧めします。したがって、楽の最初のコレクションの置換は実際には次のように書くことができます。

S:g/\c[LATIN SMALL LETTER A WITH CIRCUMFLEX]/\c[LATIN SMALL LETTER I WITH CIRCUMFLEX]/

https://raku.org

関連情報