如何在 Windows] 上用逗号 [Linux 替换文本

How to replace text with comma [Linux on Windows]

我们从客户那里收到这些具有这种粗略格式的自动电子邮件:

VP##0-X1-#####-#[Revision #:Document title]
VP##0-X2-#####-#[Revision #:Document title]
VP##0-X3-#####-#[Revision #:Document title]

我想做的事情:

这样我就可以将其转换为 CSV,然后使用一些 excel 魔法来填充我们的跟踪 sheet。

我试过使用 sed 这种通用格式:

sed -i 's,[Revision ,\,,g' <FILE>

但我不知道如何为这种情况添加逗号。

这就是我最终想要得到的:

VP##0-X1-#####-#,#,Document title
VP##0-X2-#####-#,#,Document title
VP##0-X3-#####-#,#,ocument title

感谢任何和所有见解。

我在 Windows 上使用 Ubuntu。

[ 必须转义,因为它是正则表达式的特殊字符。此外,在 sed 命令中使用另一个字符而不是 , 作为分隔符可能会更好。这应该可以解决问题:

sed -i 's/\[Revision /,/g' <FILE>

您可以使用:

sed -Ei 's/(.*)(\[Revision)(.*)(:)(.*)(])/,,/' <FILE>

用一行和一个回显测试它:

$ echo "[VP##0-X1-#####-#[Revision #:Document title]" | sed -E 's/(.*)(\[Revision)(.*)(:)(.*)(])/,,/'
[VP##0-X1-#####-#, #,Document title

解释:

  • '(.*)(\[Revision)(.*)(:)(.*)(])

sed命令前半部分的正则表达式分为()定义的6组。 第 2 组 (\[Revision) 将匹配 "[Revision",第 4 组 (:) 将匹配 ":",您要替换的字符串部分。

  • /,,/'

在命令的第二部分中,可以使用相同的组作为替换文本,所以我使用组1(</code>)来保留<code>"[Revision"之前的所有内容,然后使用逗号',',然后使用第 3 组 (</code>)(<code>"[Revision"":" 之间的所有内容),逗号 ",",最后使用第 5 组(</code>).第 6 组将匹配最后一个 <code>']',因此它未被使用,因为您希望将其删除。

对于 sed,/ 是一个很常见的分隔符。另外,方括号是特殊字符,需要转义。

用逗号替换[Revision

sed -i 's/\[Revision /,/g' <FILE>

用逗号替换:

sed -i 's/:/,/g' <FILE>

删除]

sed -i 's/\]//g' <FILE>
sed  's/\[Revision /,/;s/:/,/;s/]//' inputfile
VP##0-X1-#####-#, #,Document title
VP##0-X2-#####-#, #,Document title
VP##0-X3-#####-#, #,Document title

无需使用 back-referencing 或使用多个 sed 命令来进行繁重的工作。您可以从单个 sed 命令中发出多个替换命令:

语法:

sed 's/a/A/' file
sed 's/b/B/' file
sed 's/c/C/' file

可以合并为一个命令:

sed 's/a/A/;s/b/B/;s/c/C/' file   #note the semicolon separating multiple replace operations.