用csv文件中的特殊符号替换字符串

时间:2018-04-02 08:48:33

标签: bash shell csv

我有一个csv文件/tmp/test.csv,其中包含以下内容。

VM,Datacenter,Cluster,Host,Folder,OS,VM ID,VM UUID,vCenter UUID
A0F0US014XVM022,"/AMMWDC04_DC/A0F0 <96> AA DR","Red Hat Enterprise Linux 6 (64-bit)",vm-2910,421f2eba-8b60-6166-3b56-f22e3f71eecf,94694731-df3a-4ee6-9962-49df97a6f08d

我想在csv文件中用<96>替换-(用空格包围)。我试过sed -i -e 's/<96>/-/g' /tmp/test.csv,但这不起作用。可能是因为涉及的特殊符号。

sed version 4.2.1

[root@fmsprdchef001 ~]# grep vm-2910 /tmp/test.csv | hexdump -C
00000000  41 30 46 30 55 53 30 31  34 58 56 4d 30 32 32 2c  |A0F0US014XVM022,|
000000e0  41 4d 4d 57 44 43 30 34  5f 44 43 2f 41 30 46 30  |AMMWDC04_DC/A0F0|
000000f0  20 96 20 41 41 20 44 52  22 2c 22 52 65 64 20 48  | . AA DR","Red H|
00000100  61 74 20 45 6e 74 65 72  70 72 69 73 65 20 4c 69  |at Enterprise Li|
00000110  6e 75 78 20 36 20 28 36  34 2d 62 69 74 29 22 2c  |nux 6 (64-bit)",|
00000120  76 6d 2d 32 39 31 30 2c  34 32 31 66 32 65 62 61  |vm-2910,421f2eba|
00000130  2d 38 62 36 30 2d 36 31  36 36 2d 33 62 35 36 2d  |-8b60-6166-3b56-|
00000140  66 32 32 65 33 66 37 31  65 65 63 66 2c 39 34 36  |f22e3f71eecf,946|
00000150  39 34 37 33 31 2d 64 66  33 61 2d 34 65 65 36 2d  |94731-df3a-4ee6-|
00000160  39 34 36 32 2d 34 39 64  66 39 37 61 36 66 30 38  |9462-49df97a6f08|
00000170  64 0a 41 30 46 30 55 53  30 31 34 58 56 4d 30 32  |d.A0F0US014XVM02|
00000180  32 2c 70 6f 77 65 72 65  64 4f 6e 2c 46 61 6c 73  |2,poweredOn,Fals|
00000190  65 2c 56 6d 78 6e 65 74  33 2c 2c 2c 54 72 75 65  |e,Vmxnet3,,,True|
000001a0  2c 54 72 75 65 2c 30 30  3a 35 30 3a 35 36 3a 39  |,True,00:50:56:9|
000001b0  66 3a 30 31 3a 62 38 2c  61 73 73 69 67 6e 65 64  |f:01:b8,assigned|
000001c0  2c 22 31 30 2e 31 30 30  2e 31 2e 31 32 2c 20 66  |,"10.100.1.12, f|
000001d0  65 38 30 3a 3a 32 35 30  3a 35 36 66 66 3a 66 65  |e80::250:56ff:fe|
000001e0  39 66 3a 31 62 38 22 2c  22 41 6d 65 72 69 63 61  |9f:1b8","America|
000001f0  6e 20 41 69 72 6c 69 6e  65 73 3b 20 50 52 44 3b  |n Airlines; PRD;|
00000200  20 61 70 70 20 26 20 44  42 32 3b 44 52 22 2c 41  | app & DB2;DR",A|
00000210  4d 4d 57 44 43 30 34 5f  44 43 2c 41 4d 4d 57 44  |MMWDC04_DC,AMMWD|
00000220  43 30 34 43 41 2c 61 6d  6d 77 64 63 30 34 63 75  |C04CA,ammwdc04cu|
00000230  73 74 65 73 78 30 31 2e  69 6d 7a 63 6c 6f 75 64  |stesx01.imzcloud|
00000240  2e 69 62 6d 61 6d 6d 73  61 70 2e 6c 6f 63 61 6c  |.ibmammsap.local|
00000250  2c 22 2f 41 4d 4d 57 44  43 30 34 5f 44 43 2f 41  |,"/AMMWDC04_DC/A|
00000260  30 46 30 20 96 20 41 41  20 44 52 22 2c 22 52 65  |0F0 . AA DR","Re|
00000270  64 20 48 61 74 20 45 6e  74 65 72 70 72 69 73 65  |d Hat Enterprise|
00000280  20 4c 69 6e 75 78 20 36  20 28 36 34 2d 62 69 74  | Linux 6 (64-bit|
00000290  29 22 2c 76 6d 2d 32 39  31 30 2c 34 32 31 66 32  |)",vm-2910,421f2|
000002a0  65 62 61 2d 38 62 36 30  2d 36 31 36 36 2d 33 62  |eba-8b60-6166-3b|
000002b0  35 36 2d 66 32 32 65 33  66 37 31 65 65 63 66 2c  |56-f22e3f71eecf,|
000002c0  39 34 36 39 34 37 33 31  2d 64 66 33 61 2d 34 65  |94694731-df3a-4e|
000002d0  65 36 2d 39 34 36 32 2d  34 39 64 66 39 37 61 36  |e6-9462-49df97a6|
000002e0  66 30 38 64 0a                                    |f08d.|
000002e5

2 个答案:

答案 0 :(得分:3)

这是你的hexdump的重要部分:

  

000000f0 20 96 20 41 41 20 44 52 22 2c 22 52 65 64 20 48 | 。 AA DR&#34;,&#34; Red H |

我建议:

sed -i 's/ \x96 /-/' file

答案 1 :(得分:1)

关注sed可能对您有帮助。

sed 's/\([^<]*\)\(<.*>\)\(.*\)/\1-\3/'  Input_file

如果您想将输出保存到相同的Input_file中,请在上面的代码中使用-i选项和sed

编辑: 如果您的Input_file有控制字符,请使用以下内容。

sed 's/\r//g;s/\([^<]*\)\(<.*>\)\(.*\)/\1-\3/'   Input_file