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

发布于 2024-12-13 11:05:52 字数 97 浏览 1 评论 0原文

请向我提供一个 sed oneliner,它提供以下输出: sdc3 sdc2 对于输入: sdc3[1] sdc2[0]

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

please provide me a sed oneliner which provides this output:
sdc3 sdc2
for Input :
sdc3[1] sdc2[0]

I mean remove all subscript value from the string ..

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

执笔绘流年 2024-12-20 11:05:52
sed 's/\[[^]]*\]//g'

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

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


至于您的评论:

sed 's#\([^[ ]*\)\[[^]]*\]#/dev/\1#g'
  • 我将分隔符从通常的“/”切换为“#”,只是为了避免转义您要求的 /dev/ 位(我不会说“为了清楚起见”)
  • \(...\) 位匹配一个子组,这里是 sdc2 或其他,所以我们可以在替换中引用它,
  • 子组使用与我们丢弃索引的字符类类似的字符类: <代码>[^[ ] 表示除“[”(同样,为了避免贪婪地匹配索引)或空格(假设您的值按照您的帖子以空格分隔)之外的任何字符,
  • 替换现在是文字“/dev/”后面跟着第一个(也是唯一的)子组匹配,
  • 最后的 g 标志告诉它每行执行多个匹配,而不是在第一个匹配处停止
sed 's/\[[^]]*\]//g'

reads: substitute any string with literal "[" followed by zero or more characters that aren't a "]", and then the closing "]", with an empty string.

You need the [^]] bit to prevent greedy matching treating "[1] sdc2[0]" as a single match in your sample string.


As for your comment:

sed 's#\([^[ ]*\)\[[^]]*\]#/dev/\1#g'
  • I switch the seperator from the usual '/' to '#', just to avoid escaping the /dev/ bit you asked for (I won't say "for clarity")
  • the \(...\) bit matches a subgroup, here sdc2 or whatever, so we can refer to it in the replacement
  • the subgroup uses a similar character class to the one we used discarding the index: [^[ ] means any character except an "[" (again, to avoid greedily matching the index) or a space (assuming your values are space-delimited as per your post)
  • the replacement is now the literal "/dev/" followed by the first (and only) subgroup match
  • the g flag at the end tells it to perform multiple matches per line, instead of stopping at the first one
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文