存储与sed中的模式匹配的整行的变量是什么?

时间:2012-10-18 13:06:24

标签: bash sed autohotkey dvorak

我有一个文件,其行是以[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开头,而且该字的最后两个字符中也没有图案。

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

2 个答案:

答案 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/使用原始单词中的最后一个字符作为附加查找表中的查找并生成所需的输出