使用特殊字符?在sed

时间:2017-03-30 00:34:37

标签: regex macos sed

我正在尝试使用sed替换以下格式的电话号码:

1(123)456-7890

+和以下1是可选的。其他数字是任意的,但格式必须相同(即+1(123)456-7890,1(321)456-0987,(222)555-9900应匹配)

我在this问题中读到我需要使用扩展正则表达式选项,或者如果我想将它们用作{ }?,则要转义所有出现的--regexp-extended sed 's/+\?1\?([0-9]\{3\})[0-9]\{3\}-[0-9]\{4\}/test/g'sed 's/([0-9]\{3\})[0-9]\{3\}-[0-9]\{4\}/test/g'特殊字符。由于我的sed版本中没有+1,因此我选择转义特殊字符。

这是我到目前为止所尝试的:

+

与我指定的格式编号不匹配。

我能得到的最接近的是:

1

这匹配(222)555-9900之类似,但显然与开头的<!-- confirm password --> <div class="row"> <div class="col-xs-10 col-centered"> <div class="col-md-5 col-xs-12 inputLabels"> <b>Confirm Password:</b> </div> <div class="col-md-5 col-xs-12"> <input type="password" name="confirmPassword" ng-model="boardingData.confirmPassword" class="form-control" required compare-to="boardingData.password"> </div> </div> </div> app.directive('compareTo', function() { return { require: "ngModel", scope: { otherModelValue: "=compareTo" }, link: function(scope, element, attributes, ngModel) { ngModel.$validators.compareTo = function(modelValue) { return modelValue == scope.otherModelValue; }; scope.$watch("otherModelValue", function() { ngModel.$validate(); }); } }; input:valid {box-shadow: 0 0 3px rgb(97, 240, 59);} 的数字不匹配。

我有点失落,因为我已经尝试了很多不同的方法来匹配前面表达式的0或1,但没有一种方法有效。

以防它可能会有所帮助:我使用的是预装在Macbook上的sed。

1 个答案:

答案 0 :(得分:0)

您可以将*\?应用于群组。例如:\(abc\)\?表示“文本'abc'可以存在或不存在”。

对于您的情况,解决方案是:

sed 's/\(+\?1\)\?([0-9]\{3\})[0-9]\{3\}-[0-9]\{4\}/test/'

sed -E 's/(\+?1)?\([0-9]{3}\)[0-9]{3}-[0-9]{4}/test/'
顺便说一句,在Macbook中你有BSD sed。在linux中通常使用GNU sed(它也支持'-E'标志作为'-r'的别名)。所以最好总是使用'​​-E'来实现可移植性。