gpt4 book ai didi

linux - 将标准输出中的数字插入标准输出中的字符串

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:31:08 24 4
gpt4 key购买 nike

我在 Linux 终端上工作。我有一个字符串后跟一个数字作为标准输出,我需要一个命令用数字替换字符串的中间并将结果写入标准输出。

这是字符串和数字:图书管理员 16这就是输出应该是什么:l16n

我已经尝试使用 echo librarian 16|sed s/[a-z]*/16/g 这给了我 9 999 问题是它单独替换了每个字母并且它还替换了第一个和最后一个字母,我不能让它使用标准输出中的数字。

我也尝试过使用 cut -c 1-1sed s/[^0-9]*//gcut-c 9 -9 分别生成 l、16 和 n,但我找不到如何将它们的输出组合成一行。

最后,我尝试使用文本编辑器复制数字并将其粘贴到字符串中,但我没有取得太大进展,因为我不知道如何直接从命令行使用编辑器。

最佳答案

所以您想要的是捕获第一个字母、最后一个字母和数字,同时忽略中间部分。

在正则表达式中,我们使用 () 来告诉引擎我们想要捕获什么,其他任何东西都会被匹配或“吃掉”,但不会被捕获。所以模式应该是这样的:

([a-z])[a-z]*([a-z]) ([0-9]+)
  • ([a-z]) 获取第一个字母
  • [a-z]* 匹配零个或多个字符但不捕获。我们在这里选择“*”是因为中间可能没有任何东西可以匹配,比如当有两个或更少的字母时。
  • ([a-z]) 捕获最后一个字母。
  • “吃掉”空白。
  • ([0-9]+) 获取号码。我们使用 + 而不是 * 因为我们需要在这个位置有一个数字。

sed 对这些构造使用不同的语法,因此我们将使用 -E 标志。你可以不用它,但你必须转义 ()+ 字符,IMO 使模式有点困惑。

现在,要检索捕获的内容,我们必须使用特定于引擎的字符序列。 sed 使用 \n,其中 n 是捕获组的编号,因此我们的最终模式应如下所示:

\1\3\2
  • \1: 第一个字母
  • \3:数字
  • \2:最后一个字母

现在我们把所有东西放在一起:

$ echo librarian 16|sed -r 's/([a-z])[a-z]*([a-z]) ([0-9]+)/\1\3\2/g'
l16n

关于linux - 将标准输出中的数字插入标准输出中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58581155/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com