Bash 用csv文件中的特殊符号替换字符串
我有一个csv文件/tmp/test.csv,其中包含以下内容Bash 用csv文件中的特殊符号替换字符串,bash,shell,csv,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
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
下面的
sed
可能会对您有所帮助
sed 's/\([^<]*\)\(<.*>\)\(.*\)/\1-\3/' Input_file
这是hexdump中的重要部分: 000000 F020 96 2041 41 20 44 52 22 2c 22 52 65 64 20 48 |。AA DR“,”红色H| 我建议:
sed -i 's/ \x96 /-/' file
检查您的文件中是否有特殊字符:
cat-A文件
A0F0 M-^V AA DR
将grep vm-2910文件的输出| hextump-C
添加到您的问题中。此操作已删除,但未添加-
。这是该列的输出,A0F0 AA DR
@aaj,A0F0US014XVM022,“/AMMWDC04_DC/A0F0-AA DR”,“Red Hat Enterprise Linux 6(64位)”,vm-2910421f2eba-8b60-6166-3b56-f2e3f71eecf,94694731-df3a-4ee6-9962-49df97a6f08d
我理解正确。我不知道为什么,但这两个查询都没有添加-在我的末尾。我正在输出到控制台…未使用-I
如何解释此输出?将
替换为
。如何理解\x96
在这里的用法。20 96 20是一个空格、一个值为96(十进制150)的字节和一个空格的十六进制表示。在右侧,不可打印字符(十六进制96)由点表示\x96
是指十六进制值为96的字节。\x96
可能无法移植到所有版本的sed
。奇怪的是,最可移植的解决方案可能是使用Perlperl-i~-pe的/\x96/-/g'文件
(其中,/g
仅当一行可能包含多个引用时才是必需的,就像在sed
中一样)。
sed 's/\r//g;s/\([^<]*\)\(<.*>\)\(.*\)/\1-\3/' Input_file
sed -i 's/ \x96 /-/' file