【问题标题】:How to manipulate text with awk?如何用 awk 操作文本?
【发布时间】:2013-04-18 21:17:33
【问题描述】:

如何操作 grep 的输出文本。

现在我正在使用命令:

grep -i "<url>" $file  >> ./txtFiles/$file.txt

这将输出如下内容:

<url>http://www.simplyrecipes.com/recipes/chicken_curry_salad/</url>

然后下一个文本将转到下一行。

我怎样才能摆脱 &lt;url&gt;&lt;/url&gt; 并阻止它在最后进入下一行。

【问题讨论】:

  • 摆脱什么?也许你想删除换行符,在这种情况下,管道它在 tr "\n" " "

标签: text awk grep text-manipulation


【解决方案1】:
sed '/<\/*url>/!d;s///g'
  • &lt;\/*url&gt; 匹配开始和结束标记
  • 删除没有这个的行
  • 然后删除此模式的所有案例

用你的例子,它可能看起来像这样

sed '/<\/*url>/!d;s///g' $file >> ./txtFiles/$file.txt

【讨论】:

  • 感谢这项工作。不过,最后一件事,它仍然会转到 url 之后的下一行。你知道我怎样才能摆脱这个,以便下一个文本能够紧随其后。
  • 或者这就是我添加下一行的方式。我正在使用 printf,所以我假设这就是导致它进入以下文本的下一行的原因。我还应该使用其他东西将文本附加到行尾而不是新行吗?
【解决方案2】:

单个命令:

sed -in '/<url>/ { s|<url>\(.*\)</url>|\1| ; p ; }' INPUT > OUTPUT

或者用 awk:

awk -F "</?url>" '/<url>/ { print $2 }' INPUT > OUTPUT

注意:如果在一行中出现多个 &lt;url&gt;...&lt;/url&gt; 模式,则两者都可能给您无效的输出。如果 &lt;url&gt;...&lt;/url&gt; 包含任何管道 (|) 字符,sed 版本可能会失败。

【讨论】:

    猜你喜欢
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多