如何在没有sed的情况下替换csv文件中的一行[重复]

Posted

技术标签:

【中文标题】如何在没有sed的情况下替换csv文件中的一行[重复]【英文标题】:How to replace a line in a csv file without sed [duplicate] 【发布时间】:2019-05-12 06:22:51 【问题描述】:

我有一个 csv 文件,我想替换一行(删除它并在其位置添加新信息)但我不能使用 sed。我不知道,我的 bash 终端不支持它。假设 csv 文件是这样的:

a,b,c
d,e,f

例如,我想删除行 d,e,f 并添加 g,h,i

【问题讨论】:

我不想用不是 A 的语言来解决 X 问题,这不是一个好问题。那是因为无法说可以用什么 假设bash 可用,尝试:while read -r line; do echo "$line/d,e,f/g,h,i"; done < input.csv > replaced.csv 基础工具怎么不支持?你在某种受限的外壳中吗?你能用awk吗? perl? ls -l /tmp?难道只是你需要修复你的$PATH 你能用tr吗? 当我使用 sed -i 时,我的 bash shell 弹出非法选项。我从来没有限制你做任何事情,但因为我四处搜索,我只找到了 sed -i 的解决方案,我想知道它是否可以做不同的事情。 @PaulHodges 是的,这些命令,我​​可以很好地使用它们。 @fd0 ,我没有使用过 tr 但它可能会运行。还有一点更新,我使用了 grep -v 并且它有效(也许我认为某些论点有问题)。无论如何,感谢您到目前为止的回复。 【参考方案1】:

使用 awk:

awk '/^d,e,f$/  $0 = "g,h,i" 1' file.csv

GNU Awk 有一个 inplace 选项,或者只是写入一个临时文件,然后将 mv 它放在原始文件之上。

如果您有sed,但它不支持-i 选项,则同样的方法也适用。

perl -pi 's/^d,e,f$/g,h,i/' file.csv

将像 sed -i 一样就地替换。

tr 不适合这个任务。 Bash while read -r 循环可以工作,但很笨拙且效率很低。

【讨论】:

以上是关于如何在没有sed的情况下替换csv文件中的一行[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Linux--sed命令

sed 或 Perl 一行 + 如何仅在完全匹配时替换文件中的路径

如何用sed命令替换一行中的某个字符串

CSV 文件中的 Sed 搜索和替换插入回车

如何在Unix下使用sed命令

sed 中如何替换换行符