使用 sed 命令进行翻译

使用 sed 命令进行翻译

使用以下脚本,我尝试读取文本文件(italian.txt),并从此文件中将所有单词从意大利语翻译成英语,并将输出保存在另一个文本文件(english.txt)中。我必须将sed命令与全局命令一起使用g,以便翻译该单词的每个外观。

它工作不正常,但我不知道出了什么问题。有人可以帮助我吗?

cat italian.txt | sed -i 's/sole/sun/g' | 's/penna/pen/g' > english.txt

exit 0 

答案1

您的脚本存在几个问题:

  1. 您需要sed在第二个管道 ( |) 之后添加第二个管道。
  2. sed -i告诉sed“就地”编辑文件,但没有指定文件 -sed正在使用stdin,来自cat.您可以安全地删除它-i,您的脚本现在应该可以工作了。

固定脚本应该是:

cat italian.txt | sed 's/sole/sun/g' | sed 's/penna/pen/g' > english.txt

答案2

你用错了。

首先,你不需要猫。sed可以读取文件名。像这样:

sed 's/sole/sun/g' italian.txt

其次,您不需要为 nextsed表达式进行管道重定向。如果你需要它,它应该看起来像这样:

sed 's/sole/sun/g' italian.txt | sed 's/penna/pen/g' > english.txt

,但这是额外的工作。sed可以处理多个表达式。您可以通过 «;» 将它们分开或者将它们sed作为命令行参数添加到-e每个参数之前。

总之,命令看起来像这样:

sed 's/sole/sun/g; s/penna/pen/g' italian.txt > english.txt

答案3

例如,如果您有一个包含单词对的文件

sole sun
penna pen

...等等对于意大利语和英语中的许多单词(除了记忆之外没有实际限制),那么您可以创建一个sed脚本

s/\<sole\>/sun/g
s/\<penna\>/pen/g

...(\<word\>其中仅匹配单词word而不匹配例如wordsor reword),如下所示:

$ awk '{ printf("s/\\<%s\\>/%s/g\n", $1, $2) }' pairs.txt >translate.sed

然后您可以将该sed脚本应用于文本文件:

$ sed -f translate.sed italian.txt >english.txt

答案4

@Kusalanananda 想法的一个变体:

$ cat dict
sole:sun
penna:pen

$ sed -f <(sed -r 's!(.+):(.+)!s/\\<\1\\>/\2/g!' dict)   it.txt >en.txt

相关内容