Sed不替换文件中的值



创建一个包含以下数据的文件:

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代替NoDataNULLN:

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命令的错误或缺失,它没有产生期望的结果。

执行建议后更新测试结果:

  1. 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
    
  2. 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

最新更新