gpt4 book ai didi

bash - 用 sed 替换会忽略空格

转载 作者:行者123 更新时间:2023-11-29 09:37:32 28 4
gpt4 key购买 nike

假设我有一个名为 m1.txt 的文件,其内容 (- . ... -/-. ---/.----)我想从莫尔斯码解码为文本。这是我写的:

sed -i 's/.- /A/g' m1.txt
sed -i 's/-... /B/g' m1.txt
sed -i 's/-.-. /C/g' m1.txt

等等,包括数字,以及后面的:

sed -i 's:/ : :g' m1.txt
cat m1.txt

为了清除分隔斜杠并输出消息。

预期的输出是 TEST NO 1,但是程序输出 D...AE-ED.--A,忽略任何空格并返回错误消息.我做错了什么?

最佳答案

两件事:

  1. 你需要转义.,因为它会匹配任何字符
  2. 您需要考虑交互,因为 . (E) 将匹配单个点,它也会匹配 (N) -. 的末尾,除非您考虑它们以正确的顺序或保留分隔符(在左侧和右侧)。

(1) 很容易解决,只需转义.。对于(2),我们可以首先将行的开头和结尾映射到空格(这样我们的分隔符在左右两侧一致,然后我们在输出时保留分隔符(以避免交互)。然后,在第二个到最后一行,清理空格。然后,在最后一行,将斜杠映射到分词空格,这是您在输出中唯一需要的空格。

我没有为你做整个字母表,只是让你看到这个想法。

这是一个可行的解决方案:

$ cat m1.txt 
- . ... - / -. --- / .----
$ cat morse.sed
s/^/ /
s/$/ /
s/ - / T /g
s/ \. / E /g
s/ \.\.\. / S /g
s/ -\.\ / N /g
s/ --- / O /g
s/ \.---- / 1 /g
s/[ ]\+//g
s:/: :g
$ cat m1.txt | sed -f morse.sed
TEST NO 1

注意:这个答案被修改了,因为我一开始没有意识到 () 不是输入的一部分。此外,@Bach Lien 将 anchor 映射到第一行中的空格的想法很棒,它使事情变得更清晰,所以我已经采纳了这个想法。

关于bash - 用 sed 替换会忽略空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48386443/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com