我有一个文件,其行是以[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开头,而且该字的最后两个字符中也没有图案。
那么你知道我正在寻找的变量是什么吗? 你认为我的问题有一个比我正在尝试的更好的解决方案吗?
答案 0 :(得分:2)
您要查找的变量是&
。也许是这样的事情:
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
答案 1 :(得分:1)
这可能适合你(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/
使用原始单词中的最后一个字符作为附加查找表中的查找并生成所需的输出