假设后置代码的格式为A0A 0AA或A0 0AA,其中A是任意字母,0是任意数字我已经编写了以下sed脚本以在网页中搜索邮政编码。sed中的后置代码过滤器
s/\(([[:alnum:]]\{2,4\})\) \(([[:alnum:]]\{3\})\)/\1 \2/p
要存储在所述第一区域和所述第二区域中的第二部分(0AA)的第一部分(A0A)。然后打印出发现的内容。但是运行这个目前没有找到任何邮编。
任何想法?谢谢
假设后置代码的格式为A0A 0AA或A0 0AA,其中A是任意字母,0是任意数字我已经编写了以下sed脚本以在网页中搜索邮政编码。sed中的后置代码过滤器
s/\(([[:alnum:]]\{2,4\})\) \(([[:alnum:]]\{3\})\)/\1 \2/p
要存储在所述第一区域和所述第二区域中的第二部分(0AA)的第一部分(A0A)。然后打印出发现的内容。但是运行这个目前没有找到任何邮编。
任何想法?谢谢
很难找到你的正则表达式正确。
您需要,以最低的
但是,这仍然不适合y满足您的要求。它将匹配无效模式。你真正需要做的是
我没有给出具体的例子,说明如何做到这一点,因为你要求“任何想法”。我假设你想在正确的指针下尝试修复这个问题。
很高兴你拿起了这个事实,我想尽可能地为自己努力工作,最好的方式来学习我发现。在这些指针之后,我以 s/\(。* \)\([[:alpha:]] \ {1,2 \} \)\([[:digit:]] \ {1,2 \ } [[:阿尔法:]] \ {,1 \} \)[[:空间:]] \([[:数字:]] \)\([[:阿尔法:]] \ {2 \} \) \(。* \)/ \ 2 \ 3 \ 4 \ 5 谢谢。 – BradStevenson
看起来你的括号里有一些问题。对我来说,以下工作:
$ sed -n 's/.*\b\([[:alnum:]]\{2,3\}\) \([[:alnum:]]\{3\}\)\b.*/\1 \2/p' <<< "here is a postcode: A0A 0AA. some more text"
A0A 0AA
您还修复了突出显示的{2,4}问题。你应该在答案中指出这一点,否则OP可能没有注意到,仍然被卡住。你还没有解决正则表达式会产生很多错误匹配的问题,但那不是我们被要求修复的问题,所以这很公平。 – itsbruce
我知道你问的有效邮政编码的一个子集,但我希望这个解决方案为英国的邮政编码会有所帮助。我想接近这样的问题:
望着format for post-codes,格式是
最后一部分的正则表达式很容易:[0-9][A-Z]{2}
第一部分是窍门。我分裂问题分为两个:
[A-Z]{1,2}[0-9]{1,2}
相匹配,即,一个或两个字母后面跟着一个或两个数字;[A-Z]{1,2}[0-9][A-Z]
匹配,即一个或两个字母,然后是数字和字母。全部放在一起:
sed -rn 's/.*(([A-Z]{1,2}[0-9]{1,2}|[A-Z]{1,2}[0-9][A-Z]) [0-9][A-Z]{2}).*/\1/p'
作为一般的提示,我建议你开始通过构建和测试各个部件构建更复杂的正则表达式,验证他们的工作,然后把整个事情一起。在这种情况下,这意味着尝试匹配** A0或A0A **,然后** 0AA **,然后将它们放在一起。 – itsbruce
奇怪的问题。您的个人资料显示英国,但是您提供的格式没有充分描述英国邮政编码。 –