左括号的正则表达式三个右括号,即[123]或[368],并替换为''

时间:2016-10-30 04:05:23

标签: regex perl replace sed

我正在寻找一个正则表达式,它将匹配5个字符串,如标题中显示的两个字符串。这是一个示例输入字符串。

This is a sentence that doesn't contain any matches of the regex.  
This is a sentence that has two matches of the string at the end of the sentence [411] [101].  
This is a sentence that has three matches [876] [232] [323].

我希望在perl或sed中看到一个解决方案,从文本文件中删除这些字符串,以及从短字符串中删除此字符串的解决方案。我是正则表达式,perl和sed的新手。我尝试使用反向正则表达式工具,似乎给了我这个正则表达式,但我找不到一种方法将它用于perl或sed。

\\[\\d\\d\\d\\]

然后我用perl尝试了类似的东西并且没有进一步。

perl -p -i -e 's/\\[\\d\\d\\d\\]/""/g' textFileToRemoveRegexMatches.txt

3 个答案:

答案 0 :(得分:0)

尝试下一个:

my $str = 'word [123] word [456]';
my $regex = qr/\[\d{3}\]/p;
my $subst = '';

my $result = $str =~ s/$regex/$subst/rg;

但也许您想使用命令sed。例如

sed 's/\[\d{3}\]//g' filename.txt

答案 1 :(得分:0)

Perl中的解决方案:

$ echo 'one[876] two[232] three[323]' | perl -pe 's/\[\d{3}\]//g;'

打印:

one two three

Sed中的解决方案:

$ echo 'one[876] two[232] three[323]' | sed 's/\[[[:digit:]]\{3\}\]//g;'

打印:

one two three

这些示例使用了实时命令行界面,但是您也可以将代码放入脚本文件中以供重用,如下所示:

Perl脚本:

#! /usr/bin/perl -p
# purge-bracket-numbers.perl
s/\[\d{3}\]//g

Sed脚本:

#! /usr/bin/sed -f
# purge-bracket-numbers.sed
s/\[[[:digit:]]\{3\}\]//g

答案 2 :(得分:-1)

这个怎么样:

>>> s = "Hello world [123] this is some text"
>>> e = r'\[\d{3}\]'
>>> import re
>>> re.sub(e, '', s)
'Hello world  this is some text'

如果您想大规模地执行此操作,请考虑使用 sed 这是 s tream ed itor。除了作为macOS上的核心实用程序外,它还适用于所有Linux版本。

我用这两行创建了一个示例文件:

This is line one with [123] and needs to be substituted.
This is a longer line, lets call it line 2 that has [this thing] that should not be replaced, but [345] that should.

使用sed的方法是将替换表达式传递给它。命令s表示替换,g表示替换所有匹配项,而不仅仅是第一个匹配项。

接下来,您将表达式想要搜索,并在字符之间进行替换。常见的规范是使用/,但您可以使用任何两个在shell中没有特殊含义的相似字符。

所以,sed命令是:

sed s/search-for-this/replace-with-this/g the-name-of-the-file.txt

如果输入上述内容,sed将只返回它所替代的内容。以下是我们的正则表达式的示例:

$ sed 's/\[[0-9]\{3\}\]//g' test.txt
This is line one with  and needs to be substituted.
This is a longer line, lets call it line 2 that has [this thing] that should not be replaced, but  that should.

sed的默认行为是返回结果;并且它不会修改原始文件(因为它设计用于)。

要获取sed更改原始文件,请传递-i参数,这意味着就地 - 也就是说,在文件本身中进行替换,如下所示:

$ sed -i 's/\[[0-9]\{3\}\]//g' test.txt

请注意,这一次,它没有返回任何内容,但是,如果我们检查文件已被修改:

$ cat test.txt
This is line one with  and needs to be substituted.
This is a longer line, lets call it line 2 that has [this thing] that should not be replaced, but  that should.

注意:如果您使用的是Mac,则可能需要使用sed -i '.bak'