【问题标题】:Unable to get sed to replace commas with a word in my CSV无法让 sed 用我的 CSV 中的单词替换逗号
【发布时间】:2013-03-11 07:16:03
【问题描述】:

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

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

【问题讨论】:

  • 我会在您的sed 命令之前添加一个echo "$title",以确保它正在处理您的想法。
  • sed 正在尝试读取名为 $title 的文件 ..该变量中的任何内容 ....由于文件名中的空格,您可能需要双引号,但需要更多信息才能确定
  • 我的值在添加 sed 命令之前显示得很好。出于某种原因,它仅在我的脚本通过 sed 命令运行时发生。
  • $title 中的变量是我使用 grep 从 html 中提取的 youtube 标题名称

标签: bash csv sed


【解决方案1】:

你不能像这样直接在命令行上对文本使用 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 将 &lt;&lt;&lt; 右侧的内容传递给其标准输入上的命令,所以你得到相同的结果效果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-29
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    • 2012-05-31
    相关资源
    最近更新 更多