我有一个格式如下的文件:
foo: ...
bar: ...
baz: ...
我想删除所有以bar
,baz
或goo
开头的行。我可以用以下格式做几个seds:
sed '/^bar:.*$/d'
但我想把所有可能性都放在一个。我认为这样可行,但不删除这些行:
sed '/^(?:bar|baz|goo):.*$/d'
我也注意到,即使这样也行不通:
sed '/^(bar):.*$/d'
这是令人惊讶的,因为我认为捕获组实际上不会改变模式匹配中的任何行为。
答案 0 :(得分:4)
您需要使用扩展正则表达式
async.series([
function(callback) {
setTimeout(function() {
console.log(“Task 1”);
callback(null, 1);
}, 300);
},
function(callback) {
setTimeout(function() {
console.log(“Task 2”);
callback(null, 2);
}, 200);
},
function(callback) {
setTimeout(function() {
console.log(“Task 3”);
callback(null, 3);
}, 100);
}
], function(error, results) {
console.log(results);
});
并且sed不支持perl正则表达式,所以你应该使用
sed -r '/^(bar):.*$/d'
没有非捕获组sed -r '/^(bar|baz|foo):.*$/d'
答案 1 :(得分:4)
您可以使用:
sed '/^\(bar\|baz\|foo\):/d' file
或者使用扩展的正则表达式:
sed -r '/^(bar|baz|foo):/d' file