【问题标题】:remove string using sed that include slash使用 sed 删除包含斜杠的字符串
【发布时间】:2015-10-04 13:37:18
【问题描述】:

这是我拥有的数据:

This is a test/><STUFF
This is a test/><TRY

我正在尝试使用 sed 在 bash 中摆脱 /&gt;&lt;STUFF/&gt;&lt;TRY

所以结果有两个句子。

This is a test
This is a test

【问题讨论】:

  • 文字总是这样吗?你总是想从第一个斜杠中删除吗?如果不是这种情况,请澄清它不要依赖于此获得答案。
  • 看起来您实际上是在使用一些 HTML/XML...
  • @TomFenech,不一定。此类数据可能是通过 HTML 文件进行 grepping 的输出,因此使用正则表达式并不是一个坏主意。是否应该首先对 HTML 文件进行 grep 是另一回事 - 我想这取决于文件本身以及要实现的目标。
  • is 始终是结束或其他可能出现的两个单词之一(除了单词,尤其是在一行中出现两次的 /)?

标签: bash sed slash


【解决方案1】:

从斜线中删除所有内容:

$ sed 's_/.*__' file
This is a test
This is a test

注意_ 作为分隔符的用法,因为典型的斜线sed 's/find/replace/' file 与您正在寻找的模式相冲突。你也可以逃避它。

或使用cut,将分隔符设置为斜线并打印第一个字段:

$ cut -d'/' -f1 file
This is a test
This is a test

虽然最干净的是awk:

$ awk -F/ '{print $1}' file
This is a test
This is a test

bash 解决方案是:

while IFS="/" read name _
do
   echo "$name"
done < file

【讨论】:

    【解决方案2】:

    你可以试试这个,

    sed 's~/.*~~' file
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-29
      • 1970-01-01
      • 2022-01-11
      • 2023-03-20
      • 2012-07-18
      • 2013-05-23
      • 2019-03-28
      相关资源
      最近更新 更多