sed - 从字符串中删除特定的下标

时间:2011-11-02 17:03:16

标签: sed shell

请提供一个提供此输出的sed oneliner: sdc3 sdc2 输入: sdc3 [1] sdc2 [0]

我的意思是从字符串中删除所有下标值..

1 个答案:

答案 0 :(得分:4)

sed 's/\[[^]]*\]//g'

读取:用字面“[”后跟零个或多个不是“]”的字符替换任何字符串,然后用空字符串替换结束“]”。

您需要[^]]位来防止贪婪匹配将“[1] sdc2 [0]”视为示例字符串中的单个匹配。


至于你的评论:

sed 's#\([^[ ]*\)\[[^]]*\]#/dev/\1#g'
  • 我将分隔符从通常的'/'切换到'#',以避免转义您要求的/dev/位(我不会说“为了清晰”)
  • \(...\)位匹配一个子组,这里是sdc2或其他什么,所以我们可以在替换中引用它
  • 子组使用与我们丢弃索引的类似的字符类:[^[ ]表示除了“[”(再次,为了避免贪婪地匹配索引)或空格(假设您的值是根据你的帖子以空格分隔)
  • 替换现在是文字“/ dev /”,后跟第一个(也是唯一的)子组匹配
  • 最后的g标志告诉它每行执行多个匹配,而不是在第一个停止