替换第一个字段匹配字符串Bash的第N个CSV字段

时间:2014-06-14 09:12:26

标签: bash csv replace sed

我正在尝试根据第一个替换csv字段的内容。我在sed中尝试了一些东西 - 在另一个帖子中找到了 - 但是我无法获得正确的结果。

示例:

57c5b4da8ef722a0d4b0bbd9727982d2;510;1020;20130410
4858ecf7bf221fd8a3792615d8008dd8;530;4050;20130412

我希望能够根据数字和第一个字段包含“57c5b4da8ef722a0d4b0bbd9727982d2”的位置替换字段内容。

我当前的sed行仅适用于最后一个字段:

sed -i 's/\(57c5b4da8ef722a0d4b0bbd9727982d2\)\(;.*;\).*/\1\220130401/' myfile

3 个答案:

答案 0 :(得分:0)

我认为您尝试使用数字;替换第三个和最后一个字段(如果20130401是分隔符),

$ sed 's/^\(57c5b4da8ef722a0d4b0bbd9727982d2\)\(;[^;]*;\).*$/\1\220130401/g' file
57c5b4da8ef722a0d4b0bbd9727982d2;510;20130401
4858ecf7bf221fd8a3792615d8008dd8;530;4050;20130412

答案 1 :(得分:0)

这可以吗?

awk -F\; '$1=="57c5b4da8ef722a0d4b0bbd9727982d2" {$NF=220130401}1' OFS=\; file
57c5b4da8ef722a0d4b0bbd9727982d2;510;1020;220130401
4858ecf7bf221fd8a3792615d8008dd8;530;4050;20130412

如果第一个字段为57c5b4da8ef722a0d4b0bbd9727982d2,则将最后一个字段替换为220130401

答案 2 :(得分:0)

这可能适合你(GNU sed):

sed 's/[^;]*/xxx/2' file

这会将第二个字段替换为xxx

如果您想要特定行的第二个字段,请使用:

sed '/57c5b4da8ef722a0d4b0bbd9727982d2/s/[^;]*/2' file