首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sed不替换文件中的值。

Sed不替换文件中的值。
EN

Stack Overflow用户
提问于 2021-10-23 20:00:45
回答 1查看 121关注 0票数 0

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

样本:

代码语言:javascript
复制
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替换NoDataNULL\N

代码语言:javascript
复制
    sed -i "s/\\\\\N//g" samplefile
    sed -i "s/\x0//g" samplefile
    sed -i "s/NoData//g" samplefile

实际结果:

代码语言:javascript
复制
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

预期结果:

代码语言:javascript
复制
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

CG79LhAgIeBkPw|80199 6ypXqwLw8H9svA=04271 7 7MFzlQriUjohVg=60475 8 AtEVeaU3fiK5w/91305 AA3B5BNqNTokWw-87818 id|mdl_name|mdl_tagid|mdl_brnchcd|mdls_mktvl

  1. Suggestion_2:

awk 'BEGIN{FS=OFS="|"} NR>1{$1=$2=$5=""} 1' samplefile

CG79LhAgIeBkPw|80199 6ypXqwLw8H9svA=04271 7 7MFzlQriUjohVg=60475 8 AtEVeaU3fiK5w/91305 AA3B5BNqNTokWw-87818 id|mdl_name|mdl_tagid|mdl_brnchcd|mdls_mktvl

不过,这并不符合预期的结果。是否有办法保留分隔符并用一个空格替换值?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-24 08:41:19

从@EdMorton注释中测试代码Suggestion_2,在GNU awk中获取expected result

代码语言:javascript
复制
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版本:

代码语言:javascript
复制
awk --version
GNU Awk 5.1.0, API: 3.0 (GNU MPFR 4.1.0, GNU MP 6.2.1)
....

与@jthill注释中的sed的结果相同:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69691605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档