SED 对输入文件的行为不正常

SED 对输入文件的行为不正常

简而言之,我有一个小sed命令,应该修剪"并包装标签之间的输入<id>。它可以很好地进行单行和多行输入,但在输入文件上表现得很糟糕(通过cat或作为sed参数)

head示例输出(并作为文件上的最终命令)。

~> echo 200 | sed 's/"//g;s/^/<id>/g;s/$/<\/id>/g'                                                                                                   
<id>200</id>

~> sed 's/"//g;s/^/<id>/g;s/$/<\/id>/g' <<EO                                                                                                         
heredoc> 2301930
heredoc> 1230910293
heredoc> 102391093
heredoc> 
heredoc> EO
<id>2301930</id>
<id>1230910293</id>
<id>102391093</id>
<id></id>

~> cat job.csv | sed 's/"//g;s/^/<id>/g;s/$/<\/id>/g' | head                                                                                         
</id>79116
</id>79125
</id>79126
</id>78327
</id>78284
</id>78288
</id>78291
</id>78304
</id>78311
</id>78335

~> head job.csv                                                                                                                                      
"179116"
"179125"
"179126"
"178327"
"178284"
"178288"
"178291"
"178304"
"178311"
"178335"

你们认为可能是什么问题?

答案1

job.csv 中的 MS 行结尾?

 less job.csv

通常在行尾显示 ^M(如果是)。

答案2

如果没有,你可能会过得更好无用cat:

$ cat test.csv 
"179116"
"179125"
"179126"
"178327"
"178284"
"178288"
"178291"
"178304"
"178311"
"178335"
$ sed 's/"//g;s/^/<id>/g;s/$/<\/id>/g' test.csv 
<id>179116</id>
<id>179125</id>
<id>179126</id>
<id>178327</id>
<id>178284</id>
<id>178288</id>
<id>178291</id>
<id>178304</id>
<id>178311</id>
<id>178335</id>

相关内容