创建一个包含以下数据的文件:
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
用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=$2=$5=""} 1' samplefile
id|mdl_name|mdl_tagid|mdl_brnchcd|mdls_mktvl 6ypXQwLw8H9svA|04271 7MFzlQriUjohVg|60475 8AtEVeaU3fiK5w|91305 AA3B5BNqNTokWw|87818 CG79LhAgIeBkPw|80199
仍然与预期结果不匹配。是否有一种方法可以保留分隔符并用空格替换值?
测试你的代码Suggestion_2
从@EdMorton注释,在GNUawk
得到expected result
:
awk 'BEGIN{FS=OFS="|"} NR>1{$1=$2=$5=""} 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|
这可以帮助:https://unix.stackexchange.com/questions/145402/regex-alternation-or-operator-foobar-in-gnu-or-bsd-sed