需要 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/â/î/gubstitures是否所有(g局部)出现âwithî
  • “地址”/[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

Raku 有-ne非自动打印命令行标志。替换时,您可以使用 Raku 的“big-S”S///表示法 返回结果字符串

连接器上方andthen将重新加载主题变量 ( $_),因此每个后续S///操作都适用于先前修改的文本。最后一个子句andthen .put重新加载主题变量 ( $_) 并打印出最终文本(.put是 的缩写$_.put)。

请注意,您可能更喜欢使用 Unicode 名称,因为它可以节省剪切/粘贴特殊字符的时间。因此,在 Raku 中,第一个元音替换实际上可以写成如下:

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

https://raku.org

相关内容