我有一个任务来创建一个 sed 脚本文件,它可以从英语翻译成莫尔斯电码。但首先将莫尔斯电码文件放入 sed 脚本并转换为一个文件,该文件可用于将英文 i 翻译为莫尔斯电码。所以我试过这种方式。我在 sed 脚本中制作文件如下
s/[Aa]/\.-/g
s/[Bb]/-\.\.\./g
s/[Cc]/-\.-\./g
s/[Dd]/-\.\./g
s/[Ee]/\./g
s/[Ff]/\.\.-\./g
s/[Gg]/--\./g
s/[Hh]/\.\.\.\./g
s/[Ii]/\.\./g
s/[Jj]/\.---/g
s/[Kk]/-\.-/g
s/[Ll]/\.-\.\./g
s/[Mm]/--/g
s/[Nn]/-\./g
s/[Oo]/---/g
s/[Pp]/\.--\./g
s/[Qq]/--\.-/g
s/[Rr]/\.-\./g
s/[Ss]/\.\.\./g
s/[Tt]/-/g
s/[Uu]/\.\.-/g
s/[Vv]/\.\.\.-/g
s/[Ww]/\.--/g
s/[Xx]/-\.\.-/g
s/[Yy]/-\.--/g
s/[Zz]/--\.\./g
s/0/------/g
s/1/\.---/g
s/2/\.\.---/g
s/3/\.\.\.--/g
s/4/\.\.\.\.-/g
s/5/\.\.\.\.\./g
s/6/-\.\.\.\./g
s/7/--\.\.\./g
s/8/---\.\./g
s/9/----\./g
Run Code Online (Sandbox Code Playgroud)
但最终我应该有一个脚本文件,可用于将英语翻译成莫尔斯电码。我被困在这里
你完成了。
只需在文件上运行您的脚本:
sed -f script.sed inputfile
Run Code Online (Sandbox Code Playgroud)
例子:
$ cat file
Kusalananda
$ sed -f script.sed file
-.-..-....-.-...--..--.-...-
Run Code Online (Sandbox Code Playgroud)
在您的脚本中唯一值得评论的是,当点出现在替换文本中时不需要对其进行转义,并且脚本不处理标点符号。您可能还希望以空格或其他一些字符结束每个代码以便于解码(s/\(.\)/\1 /g如果您将其作为第一条指令运行,则会这样做)。
您还可以[Aa]通过让第一条指令成为
s/\([A-Z]\)/\L\1/g
Run Code Online (Sandbox Code Playgroud)
sed虽然这需要 GNU ,但会将所有字母转换为小写。
在非 GNU 中sed,以下将小写所有字母:
y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
Run Code Online (Sandbox Code Playgroud)
如果你愿意,你可以添加
#!/usr/bin/sed -f
Run Code Online (Sandbox Code Playgroud)
作为脚本的最顶层并使其可执行。这将允许您将脚本运行为
./script.sed file
Run Code Online (Sandbox Code Playgroud)
前提是 - 行上的路径sed是正确的#!。当然,您也可以去掉.sed文件名的扩展名。它什么都不做。