使用sed替换管道符

时间:2017-05-22 21:23:57

标签: bash sed

我无法找到sed个选项来替换字符串匹配后的下两个字符。基本上,在这些CSV文件中,我试图在|匹配后替换前两个直接管道jobcd字符,因为它应该是一个字段。

在我意识到这取代了每个|字符之前,我能够运行这个... sed -i 's/|/%/g' data.csv

以下是这些csv文件的示例行:

-1|7149636|2015-02-14 00:42:23|20150214|4223||Delete Future Batch||jobcd: %PAL| Cnt:60|||1900-01-01 00:00:00|0|||0||||0|0|0|.000

我正试图让那一行看起来像:

-1|7149636|2015-02-14 00:42:23|20150214|4223||Delete Future Batch||jobcd: %PAL% Cnt:60%||1900-01-01 00:00:00|0|||0||||0|0|0|.000

编辑:而不是%,我正在尝试用\|替换,所以我试图让输出看起来像:

-1|7149636|2015-02-14 00:42:23|20150214|4223||Delete Future Batch||jobcd: %PAL\| Cnt:60\|||1900-01-01 00:00:00|0|||0||||0|0|0|.000

1 个答案:

答案 0 :(得分:0)

您可以使用:

s='-1|7149636|2015-02-14 00:42:23|20150214|4223||Delete Future Batch||jobcd: %PAL| Cnt:60|||1900-01-01 00:00:00|0|||0||||0|0|0|.000'

sed -E 's/(\|jobcd)([^|]*)\|([^|]*)\|/\1\2\\|\3\\|/g' <<< "$s"
-1|7149636|2015-02-14 00:42:23|20150214|4223||Delete Future Batch||jobcd: %PAL\| Cnt:60\|||1900-01-01 00:00:00|0|||0||||0|0|0|.000