0

您好,我正在使用 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:无法读取翻转:没有这样的文件或目录 sed:无法读取:没有这样的文件或目录等等

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

4

1 回答 1

2

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

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

这样 sed 会看到文件上的文本(在这种情况下是标准输入)。另请注意,我在 sed 的参数中使用了单引号;在这种情况下,我认为这不会有任何区别,但一般来说,确保 bash 不会与命令混淆是一种很好的做法。

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

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

我认为这只适用于 bash,而不适用于 dash 等。这被称为“here-string”,bash 将右侧的内容传递<<<给其标准输入上的命令,因此您可以获得相同的效果。

于 2013-03-10T23:09:58.847 回答