从大文件中删除模式(〜1G)
问题描述:
我试图从文件中删除此模式/([0-9]+)#(\w)+.(\w)+.(\w)+.(\w)+.(\w)+#/g
我正在使用sed
(但我可以使用Linux中的其他任何工具)。从大文件中删除模式(〜1G)
sed 's|/([0-9]+)#(\w)+.(\w)+.(\w)+.(\w)+.(\w)+#/g||g' test.txt
在上面,我是试图取代正则表达式的命令用一个空字符串匹配(除去正则表达式匹配) 运行这并没有使文件中的任何改变。
以下是我在文件test.txt
3149177#sometext.something.a.e8f933.1414522190425#{....}3149177#sometext.somethingElsea.a12345.e8f932.1414412190425#{.....}3149177#sometext.somethingElsea.a23456.e8f931.1414512190425#{....}
这里是我想什么有编辑
{....}{.....}{....}
答
你有多余的分隔符和g
标志。这工作:
sed -i.bak -r 's|([0-9]+)#(\w)+.(\w)+.(\w)+.(\w)+.(\w)+#||g' test.txt
{....}{.....}{....}
答
后,你忘了-i
标志sed的,这是负责编辑原地
来自人的报价(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)
答
使用类似
>>> echo "3149177#sometext.something.a.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'
会给输出
{....}{.....}{....}
答
您可以在正则表达式可能减少到这一点:
sed -i.bak -r 's/\d+#\w+(?:\.\w+){4}#//g' test.txt
\d+
\# \w+
(?: \. \w+){4}
\#
答
如果删除行,而不是空行是一个可能的解决方案
fgrep -v '/([0-9]+)#(\w)+.(\w)+.(\w)+.(\w)+.(\w)+#/g' test.txt