从大文件中删除模式(~1G)

时间:2014-10-29 17:47:12

标签: regex linux text replace sed

我正在尝试从文件/([0-9]+)#(\w)+.(\w)+.(\w)+.(\w)+.(\w)+#/g中删除此模式 我正在使用sed(但我可以使用Linux中的任何其他工具)。

sed 's|/([0-9]+)#(\w)+.(\w)+.(\w)+.(\w)+.(\w)+#/g||g' test.txt

在上面的命令中,我试图用空字符串替换正则表达式匹配(删除正则表达式匹配) 运行此功能不会对文件进行任何更改。

以下是我在test.txt文件中的内容

3149177#sometext.something.a01234.e8f933.1414522190425#{....}3149177#sometext.somethingElsea.a12345.e8f932.1414412190425#{.....}3149177#sometext.somethingElsea.a23456.e8f931.1414512190425#{....}

以下是编辑后我想要的内容

{....}{.....}{....}

5 个答案:

答案 0 :(得分:1)

您有额外的分隔符和g标记。这有效:

sed -i.bak -r 's|([0-9]+)#(\w)+.(\w)+.(\w)+.(\w)+.(\w)+#||g' test.txt
{....}{.....}{....}

答案 1 :(得分:1)

你可以将正则表达式减少到这个:

sed -i.bak -r 's/\d+#\w+(?:\.\w+){4}#//g' test.txt

 \d+ 
 \# \w+ 
 (?: \. \w+ ){4}
 \# 

答案 2 :(得分:0)

你忘记了sed的-i标志,它负责编辑就地

引自man(BSD sed):

 -i extension
         Edit files in-place, saving backups with the specified extension.  If a zero-length extension is given, no backup will be saved.  It is not recommended to give a zero-length extension when in-place editing files, as you risk corruption or par-
         tial content in situations where disk space is exhausted, etc.

或GNU sed:

 -i[SUFFIX], --in-place[=SUFFIX]
          edit files in place (makes backup if SUFFIX supplied)

答案 3 :(得分:0)

使用类似

的内容
>>> echo "3149177#sometext.something.a01234.e8f933.1414522190425#{....}3149177#sometext.somethingElsea.a12345.e8f932.1414412190425#{.....}3149177#sometext.somethingElsea.a23456.e8f931.1414512190425#{....}" | sed -r 's/([0-9]+)#(\w)+.(\w)+.(\w)+.(\w)+.(\w)+#//g'

将输出

{....}{.....}{....}

答案 4 :(得分:0)

如果删除行而不是空行是一种可能的解决方案

fgrep -v '/([0-9]+)#(\w)+.(\w)+.(\w)+.(\w)+.(\w)+#/g' test.txt