简单的问题,假设我有以下文字:
"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;抛出路径错误。
有什么想法吗?
答案 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. ^\ ^& ^| ^> ^< ^^
-i[SUFFIX]
--in-place[=SUFFIX
此选项指定要就地编辑文件。 GNU sed 通过创建临时文件并将输出发送到此文件来完成此操作 而不是标准输出.1。
此选项隐含
-s
。当到达文件末尾时,临时文件将重命名为 输出文件的原始名称。如果提供,则使用扩展名 在重命名临时文件之前修改旧文件的名称, 从而制作备份副本2)。
遵循以下规则:如果扩展名不包含*,那么它 被附加到当前文件名的末尾作为后缀;如果 扩展名包含一个或多个*字符,然后每个星号都包含 替换为当前文件名。这允许您添加前缀 备份文件,而不是(或除了)后缀,甚至是 将原始文件的备份副本放入另一个目录 (如果目录已存在)。
如果未提供扩展名,则原始文件将被覆盖 做备份。