我的命令是这样的:echo"12cats"|sed's/[0-9]+/Number/g'(我在vanillaMac中使用sed)我希望结果是:Numbercats然而,真正的结果是:12cats有人对此有想法吗?谢谢! 最佳答案 +必须反斜杠才能获得其特殊含义。echo"12cats"|sed's/[0-9]\+/Number/g' 关于linux-为什么这个用于匹配数字的sed命令不起作用?,我们在StackOverflow上找到一个类似的问题: https
就像我们可以在vim中删除(或替换,或yank等)文件开头的第4到第6行一样::4,6d我想删除(或替换、抽取等)文件结尾的倒数第4行到第6行。这意味着,如果文件有15行,我会这样做::10,12d但是当他们不知道文件中有多少行时就无法做到这一点——我将在一批文件中使用它。我如何在vim和sed中执行此操作?我确实看了thispost,但没有发现它有用。 最佳答案 好吧,使用vim,您可以尝试以下操作——无论如何,这非常直观::$-4,$-5d现在,使用sed我找不到确切的方法,但是如果你可以使用sed以外的东西,这里有一个解决方案
就像我们可以在vim中删除(或替换,或yank等)文件开头的第4到第6行一样::4,6d我想删除(或替换、抽取等)文件结尾的倒数第4行到第6行。这意味着,如果文件有15行,我会这样做::10,12d但是当他们不知道文件中有多少行时就无法做到这一点——我将在一批文件中使用它。我如何在vim和sed中执行此操作?我确实看了thispost,但没有发现它有用。 最佳答案 好吧,使用vim,您可以尝试以下操作——无论如何,这非常直观::$-4,$-5d现在,使用sed我找不到确切的方法,但是如果你可以使用sed以外的东西,这里有一个解决方案
我有几百GB的数据需要使用Cygwin中的unix粘贴实用程序粘贴在一起,但如果文件中有WindowsEOL字符,它将无法正常工作。数据可能有也可能没有WindowsEOL字符,如果不需要,我不想花时间运行dos2unix。所以我的问题是,在Cygwin中,我如何确定这些文件是否具有WindowsEOLCRLF字符?我试过创建一些测试数据并运行sed-r's/\r\n//'testdata.txt但是无论是否运行了dos2unix,这似乎都是匹配的。谢谢。 最佳答案 file(1)实用程序知道其中的区别:$file*|grepASC
我有几百GB的数据需要使用Cygwin中的unix粘贴实用程序粘贴在一起,但如果文件中有WindowsEOL字符,它将无法正常工作。数据可能有也可能没有WindowsEOL字符,如果不需要,我不想花时间运行dos2unix。所以我的问题是,在Cygwin中,我如何确定这些文件是否具有WindowsEOLCRLF字符?我试过创建一些测试数据并运行sed-r's/\r\n//'testdata.txt但是无论是否运行了dos2unix,这似乎都是匹配的。谢谢。 最佳答案 file(1)实用程序知道其中的区别:$file*|grepASC
我有以下文件tititatatototata如果我执行sed-i"/tat/d"file.txt它将删除所有包含tat的行。命令返回:tititoto但我只想删除包含tat的文件中出现的第一行:tititototata我该怎么做? 最佳答案 您可以使用双地址形式:sed'0,/tat/{/tat/d;}'inputfile这将删除第一次出现的模式。引用自infosed:Alinenumberof`0'canbeusedinanaddressspecificationlike`0,/REGEXP/'sothat`sed'willtry
我有以下文件tititatatototata如果我执行sed-i"/tat/d"file.txt它将删除所有包含tat的行。命令返回:tititoto但我只想删除包含tat的文件中出现的第一行:tititototata我该怎么做? 最佳答案 您可以使用双地址形式:sed'0,/tat/{/tat/d;}'inputfile这将删除第一次出现的模式。引用自infosed:Alinenumberof`0'canbeusedinanaddressspecificationlike`0,/REGEXP/'sothat`sed'willtry
这在Linux(Debian)上运行良好:sed-e's,^[\t]*psd\(.*\)\;,,'在mac上,我相信我必须使用-E标志,而不是-e:sed-E's,^[\t]*psd\(.*\)\;,,'但正则表达式不匹配,因此不会删除我想要的行。关于如何解决这个问题有什么建议吗?示例输入:apabepapsd(cepa);depapsd(epa);psd(fepagepahepa);对于该输入,预期的输出是:apabepadepapsd(epa); 最佳答案 -E标志表示使用扩展的正则表达式。您应该只使用-e,就像在Linux上一
这在Linux(Debian)上运行良好:sed-e's,^[\t]*psd\(.*\)\;,,'在mac上,我相信我必须使用-E标志,而不是-e:sed-E's,^[\t]*psd\(.*\)\;,,'但正则表达式不匹配,因此不会删除我想要的行。关于如何解决这个问题有什么建议吗?示例输入:apabepapsd(cepa);depapsd(epa);psd(fepagepahepa);对于该输入,预期的输出是:apabepadepapsd(epa); 最佳答案 -E标志表示使用扩展的正则表达式。您应该只使用-e,就像在Linux上一
我正试图找到一种聪明的方法来确定传递给sed的文件是否已成功更改。基本上,我想知道文件是否已更改,而不必查看文件修改日期。我之所以需要这个,是因为如果sed已成功替换模式,我需要做一些额外的事情。我目前有:grep-q$pattern$filenameif[$?-eq0]thensed-is:$pattern:$new_pattern:$filename#DOSOMEOTHERSTUFFHEREelse#DOSOMEOTHERSTUFFHEREfi上面的代码有点贵,我希望能够在这里使用一些hack。 最佳答案 晚会有点晚了,但为了其