无法使用我的CSV中的单词替换逗号

时间:2013-03-10 22:58:23

标签: bash csv sed

您好我使用bash通过使用grep从html文件中提取数据来创建CSV文件。问题是在获取数据然后使用sed取出之后,在其中并且像My_com这样的词语给我带来了疯狂。这是我的代码。

time=$(grep -oP 'data-context-item-time=.*.data-context-item-views' index.html \
| cut -d'"' -f2)

title=$(grep -oP 'data-context-item-title=.*.data-context-item-id' index.html |\
cut -d'"' -f2)

sed "s/,/\My_commoms/g" $title
echo "$user,$views,$time,$title" >> test

我一直收到这个错误     sed:无法读取Flipping:没有这样的文件或目录     sed:无法读取:没有这样的文件或目录 等等

关于我的代码有什么问题的任何建议

1 个答案:

答案 0 :(得分:2)

你不能直接在命令行上使用sed文本; sed需要一个文件,因此它将文本作为文件名读取。试试这个你的倒数第二行:

echo $title | sed 's/,/My_com/g'

这样sed就会看到文件上的文本(本例中为stdin)。另请注意,我在sed的参数中使用了单引号;在这种情况下,我认为它不会产生任何影响,但总的来说,确保bash根本不会破坏命令是一种好习惯。

如果您不想使用echo | sed链,您也可以像这样重写它:

sed 's/,/My_com/g' <<< "$title"

我认为只适用于bash,而不是破折号等。这称为'here-string',bash将<<<右侧的内容传递给stdin上的命令,这样你就得到了同样的效果。