我有一个包含多行的文本文件。我将使用sed替换其中一行中的逗号分隔值。每行的开头都有一个ID(基本上是记录ID)。我需要确定使用ID进行修改的正确行。我曾经考虑过逐行阅读文件直到找到它,但我很好奇还有另外一种方法吗?
答案 0 :(得分:1)
sed -e '/^theID,/s/oldValue/newValue/'
答案 1 :(得分:0)
对于这种特殊情况,awk或Perl可能会更好
这将取代" foo"用" bar"在您的文件中与第一列中的yourID匹配的行
awk -F ',' '/yourID/ {gsub("foo", "bar", $2); print}' fileIn > fileOut
或perl oneliners,这里用#34; bar"交换第3列。其中line与第一列中的yourID匹配。
perl -F',' -lane 'if(@F[0] =~ m/yourID/){ @F[2] = "bar"; print(join(", ", @F))}' fileIn > fileOut
答案 2 :(得分:0)
其他解决方案似乎不可靠(ID未经过正确测试),所以这是我的perl方式:
$ cat file
001,a,b,c
002,a2,b2,c2
$ perl -F, -lane '$F[0] eq "002" and $F[1] = "z"; print join ",", @F' file
001,a,b,c
002,z,b2,c2
如果要替换文件就地,可以添加-i
开关,以便:
$ perl -i -F, -lane '$F[0] eq "002" and $F[1] = "z"; print join ",", @F' file
但实际上应该在这里使用像perl的Text::CSV解析器这样的合适的CSV。