如何在没有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文件中的一行[重复]的主要内容,如果未能解决你的问题,请参考以下文章