2

我有一个文件,其行是以意大利语结尾的单词[aiou]'

gia'
giacche'
giovedi'
giu'

我想用自动热键命令替换这些行,这将允许我用撇号写这些词并自动将它们翻译成正确的版本,这就是我想要的

::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 开头,单词的最后两个字符也没有模式。

那么你知道我要找的变量是什么吗?你认为我的问题有比我正在尝试的更好的解决方案吗?

4

2 回答 2

3

您要查找的变量是&. 也许是这样的:

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

您还可以将所有五个元音的所有命令串在一起:

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/使用原始单词中的最后一个字符作为附加查找表中的查找并生成所需的输出
于 2012-10-18T14:53:08.867 回答