【问题标题】:Removing a portion of a string that has forward slashes in it删除字符串中包含正斜杠的部分
【发布时间】:2012-07-18 03:52:40
【问题描述】:

我不知道如何删除字符串中包含正斜杠和问号的部分。

示例:/diag/PeerManager/list?deviceid=RXMWANT8WFYJNF7K6DXXXJLJVN

我需要输出为RXMWANT8WFYJNF7K6DXXXJLJVN

我尝试了trsed,但tr 删除了输出中我需要的一些字符。 sed 因为正斜杠给我带来了麻烦。

删除字符串的/diag/PeerManager/list?deviceid= 部分的快速方法是什么? 谢谢!

【问题讨论】:

  • 如果您可以更准确地了解您想要做什么,这将有所帮助。删除第一个 = 之前的所有内容?如果恰好是您的字符串的开头,请精确删除前缀/diag/PeerManager/list?deviceid=?将字符串解析为来自 URL,识别查询部分中的名称/值对,并提取 deviceid? 的值完全不同的东西?
  • 您好,谢谢您,抱歉没有详细说明。是的,我想完全删除 '/diag/PeerManager/list?deviceid=' 行的一部分,或者删除 = 符号之前的所有内容也会给我我正在寻找的内容。

标签: string parsing sed tr


【解决方案1】:

这对我有用:

sed 's/.*deviceid=\([^&]*\).*/\1/'

例子:

$ echo '/diag/PeerManager/list?deviceid=RXMWANT8WFYJNF7K6DXXXJLJVN' | sed 's/.*deviceid=\([^&]*\).*/\1/'
RXMWANT8WFYJNF7K6DXXXJLJVN

这不是最强大的解决方案,但如果您有一组永远不会改变的固定输入,它可能就足够了。

【讨论】:

  • 谢谢 cdhowie!我需要加强我的 sed 排骨。非常感谢!
【解决方案2】:

使用awk 的一种方式,如果每行仅出现一次=

awk -F= '{ print $2 }' file.txt

结果:

RXMWANT8WFYJNF7K6DXXXJLJVN

【讨论】:

    【解决方案3】:

    使用等号作为字段分隔符

    如果您知道您的 GET query string 将始终只有一个参数(在本例中为 deviceid),那么您可以使用等号作为标准 的字段分隔符切 实用程序。例如:

    $ echo '/diag/PeerManager/list?deviceid=RXMWANT8WFYJNF7K6DXXXJLJVN' |
        cut -d= -f2-
    RXMWANT8WFYJNF7K6DXXXJLJVN
    

    【讨论】:

      【解决方案4】:

      怎么样:

      $ echo /diag/PeerManager/list?deviceid=RXMWANT8WFYJNF7K6DXXXJLJVN | sed 's/^.*=//'
      RXMWANT8WFYJNF7K6DXXXJLJVN
      

      【讨论】:

        【解决方案5】:

        echo "/diag/PeerManager/list?deviceid=RXMWANT8WFYJNF7K6DXXXJLJVN" | sed -n 's:/[a-zA-Z]/[a-zA-Z]/[a-zA-Z]?[a-zA-Z] em>=::p'

        这应该可以解决问题。我选择冒号作为分隔符,因为它不会导致正斜杠出现任何问题。这对它将接收的输入类型做出了很多假设,特别是它只包含三个反斜杠,它们之间有大小写字母,一系列以问号结尾的字母,另一系列以等号结尾的字母标志。然后删除这些项目并打印剩余的字符(您的设备 ID)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-10-04
          • 1970-01-01
          • 2012-06-28
          • 1970-01-01
          • 2015-06-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多