Windows Sed转义><人物

时间:2015-04-17 07:44:26

标签: regex windows sed cmd

简单的问题,假设我有以下文字:

"websitedata://somenumber:1111022001"><property=something

使用Windows Sed我希望能够只打印数字1111022001并将其传输到文件,所以我执行以下操作:

sed -n "s/.*\"websitedata:\/\/somenumber:\(.*\)\"><property=something.*/\1/p" filename > output_filename

它失败了,因为它仍然看到第一个&gt;在那里说出意想不到的&gt;在这个时候,如果我用^来逃避&gt;&lt;然后Sed看到最后一个&gt;作为另一个命令并失败,也使用\来转义&gt;&lt;抛出路径错误。

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

sed 's#.*:\([0-9]*\)".*#\1#' filename

假设您的样本数据仍然是相同的结构(因此没有错误或相应的条件)

答案 1 :(得分:0)

嗯,对我而言,唯一的选择是将其分解为2个sed命令,而不是那个,第一个:

sed -i "s/[></"]//g" filename

删除了所有&gt;,&lt;和“人物,然后它是

sed -n "s/.*websitedata:\/\/somenumber:\(.*\)property=something.*/\1/p" filename > output_filename

最初想把它保持在一条线上,但这样可以,所以没关系。

答案 2 :(得分:0)

您需要同时转义> <(使用转义字符^),因为它们都是重定向符号。

><替换为^>^<


“当我使用^&gt; ^&lt;,最后一个&gt;告诉cmd将输出传递给文件失败时,sed将其作为另一个参数读取。”

您可以使用-i[SUFFIX]--in-place[=SUFFIX]命令行选项代替> output_filename

这将更改原始文件并可选择进行备份。


来源Escape Characters, Delimiters and Quotes

  

逃脱角色

     

^逃脱角色。

     

在命令符号之前添加转义字符允许它   被视为普通文本。

     

当管道或重定向任何这些字符时,你应该加前缀   与逃脱角色:&amp; \&lt; &GT; ^ |

 e.g.  ^\  ^&  ^|  ^>  ^<  ^^

来源sed, a stream editor

  

-i[SUFFIX]

     

--in-place[=SUFFIX

     

此选项指定要就地编辑文件。 GNU sed   通过创建临时文件并将输出发送到此文件来完成此操作   而不是标准输出.1。

     

此选项隐含-s

     

当到达文件末尾时,临时文件将重命名为   输出文件的原始名称。如果提供,则使用扩展名   在重命名临时文件之前修改旧文件的名称,   从而制作备份副本2)。

     

遵循以下规则:如果扩展名不包含*,那么它   被附加到当前文件名的末尾作为后缀;如果   扩展名包含一个或多个*字符,然后每个星号都包含   替换为当前文件名。这允许您添加前缀   备份文件,而不是(或除了)后缀,甚至是   将原始文件的备份副本放入另一个目录   (如果目录已存在)。

     

如果未提供扩展名,则原始文件将被覆盖   做备份。