Sed 没有替换文件中的值
Sed is not replacing the values in a file
有一个包含以下数据的文件:
示例文件:
id|mdl_name|mdl_tagid|mdl_brnchcd|mdls_mktvl
NoData|\N|6ypXQwLw8H9svA|04271|NoData
NoData|\N|7MFzlQriUjohVg|60475|NoData
NoData|\N|8AtEVeaU3fiK5w|91305|NULL
NoData|\N|AA3B5BNqNTokWw|87818|NoData
NoData|\N|CG79LhAgIeBkPw|80199|NULL
使用sed
替换NoData
、NULL
和\N
:
sed -i "s/\\\N//g" samplefile
sed -i "s/\x0//g" samplefile
sed -i "s/NoData//g" samplefile
实际结果:
id|mdl_name|mdl_tagid|mdl_brnchcd|mdls_mktvl
NoData|\N|6ypXQwLw8H9svA|04271|NoData
NoData|\N|7MFzlQriUjohVg|60475|NoData
NoData|\N|8AtEVeaU3fiK5w|91305|NULL
NoData|\N|AA3B5BNqNTokWw|87818|NoData
NoData|\N|CG79LhAgIeBkPw|80199|NULL
预期结果:
id|mdl_name|mdl_tagid|mdl_brnchcd|mdls_mktvl
||6ypXQwLw8H9svA|04271|
||7MFzlQriUjohVg|60475|
||8AtEVeaU3fiK5w|91305|
||AA3B5BNqNTokWw|87818|
||CG79LhAgIeBkPw|80199|
没有得到 sed
命令中的错误或遗漏,它没有产生所需的结果。
实施建议后更新测试结果:
Suggestion_1:
sed -Ei 's/\N|NULL|NoData//g' samplefile
id|mdl_name|mdl_tagid|mdl_brnchcd|mdls_mktvl
6ypXQwLw8H9svA|04271
7MFzlQriUjohVg|60475
8AtEVeaU3fiK5w|91305
AA3B5BNqNTokWw|87818
CG79LhAgIeBkPw|80199
Suggestion_2:
awk 'BEGIN{FS=OFS="|"} NR>1{===""} 1' samplefile
id|mdl_name|mdl_tagid|mdl_brnchcd|mdls_mktvl
6ypXQwLw8H9svA|04271
7MFzlQriUjohVg|60475
8AtEVeaU3fiK5w|91305
AA3B5BNqNTokWw|87818
CG79LhAgIeBkPw|80199
仍然不符合预期结果。有没有办法保留分隔符并仅用 space?
替换值
测试你的代码 Suggestion_2
来自 @EdMorton 的评论,在 GNU awk
中得到 expected result
:
awk 'BEGIN{FS=OFS="|"} NR>1{===""} 1' file id|mdl_name|mdl_tagid|mdl_brnchcd|mdls_mktvl
||6ypXQwLw8H9svA|04271|
||7MFzlQriUjohVg|60475|
||8AtEVeaU3fiK5w|91305|
||AA3B5BNqNTokWw|87818|
||CG79LhAgIeBkPw|80199|
GNU awk 版本:
awk --version
GNU Awk 5.1.0, API: 3.0 (GNU MPFR 4.1.0, GNU MP 6.2.1)
....
与来自@jthill 评论的 sed
相同的结果:
sed -E 's/(\N|NULL|NoData)//g' file id|mdl_name|mdl_tagid|mdl_brnchcd|mdls_mktvl
||6ypXQwLw8H9svA|04271|
||7MFzlQriUjohVg|60475|
||8AtEVeaU3fiK5w|91305|
||AA3B5BNqNTokWw|87818|
||CG79LhAgIeBkPw|80199|
有一个包含以下数据的文件:
示例文件:
id|mdl_name|mdl_tagid|mdl_brnchcd|mdls_mktvl
NoData|\N|6ypXQwLw8H9svA|04271|NoData
NoData|\N|7MFzlQriUjohVg|60475|NoData
NoData|\N|8AtEVeaU3fiK5w|91305|NULL
NoData|\N|AA3B5BNqNTokWw|87818|NoData
NoData|\N|CG79LhAgIeBkPw|80199|NULL
使用sed
替换NoData
、NULL
和\N
:
sed -i "s/\\\N//g" samplefile
sed -i "s/\x0//g" samplefile
sed -i "s/NoData//g" samplefile
实际结果:
id|mdl_name|mdl_tagid|mdl_brnchcd|mdls_mktvl
NoData|\N|6ypXQwLw8H9svA|04271|NoData
NoData|\N|7MFzlQriUjohVg|60475|NoData
NoData|\N|8AtEVeaU3fiK5w|91305|NULL
NoData|\N|AA3B5BNqNTokWw|87818|NoData
NoData|\N|CG79LhAgIeBkPw|80199|NULL
预期结果:
id|mdl_name|mdl_tagid|mdl_brnchcd|mdls_mktvl
||6ypXQwLw8H9svA|04271|
||7MFzlQriUjohVg|60475|
||8AtEVeaU3fiK5w|91305|
||AA3B5BNqNTokWw|87818|
||CG79LhAgIeBkPw|80199|
没有得到 sed
命令中的错误或遗漏,它没有产生所需的结果。
实施建议后更新测试结果:
Suggestion_1:
sed -Ei 's/\N|NULL|NoData//g' samplefile
id|mdl_name|mdl_tagid|mdl_brnchcd|mdls_mktvl 6ypXQwLw8H9svA|04271 7MFzlQriUjohVg|60475 8AtEVeaU3fiK5w|91305 AA3B5BNqNTokWw|87818 CG79LhAgIeBkPw|80199
Suggestion_2:
awk 'BEGIN{FS=OFS="|"} NR>1{===""} 1' samplefile
id|mdl_name|mdl_tagid|mdl_brnchcd|mdls_mktvl 6ypXQwLw8H9svA|04271 7MFzlQriUjohVg|60475 8AtEVeaU3fiK5w|91305 AA3B5BNqNTokWw|87818 CG79LhAgIeBkPw|80199
仍然不符合预期结果。有没有办法保留分隔符并仅用 space?
替换值测试你的代码 Suggestion_2
来自 @EdMorton 的评论,在 GNU awk
中得到 expected result
:
awk 'BEGIN{FS=OFS="|"} NR>1{===""} 1' file id|mdl_name|mdl_tagid|mdl_brnchcd|mdls_mktvl
||6ypXQwLw8H9svA|04271|
||7MFzlQriUjohVg|60475|
||8AtEVeaU3fiK5w|91305|
||AA3B5BNqNTokWw|87818|
||CG79LhAgIeBkPw|80199|
GNU awk 版本:
awk --version
GNU Awk 5.1.0, API: 3.0 (GNU MPFR 4.1.0, GNU MP 6.2.1)
....
与来自@jthill 评论的 sed
相同的结果:
sed -E 's/(\N|NULL|NoData)//g' file id|mdl_name|mdl_tagid|mdl_brnchcd|mdls_mktvl
||6ypXQwLw8H9svA|04271|
||7MFzlQriUjohVg|60475|
||8AtEVeaU3fiK5w|91305|
||AA3B5BNqNTokWw|87818|
||CG79LhAgIeBkPw|80199|