【问题标题】:How can I split a string in KSH bash script?如何在 KSH bash 脚本中拆分字符串?
【发布时间】:2014-11-11 16:30:56
【问题描述】:

这里是a link

我提到了这个,但我无法理解,我该如何拆分: 测试123变成测试和123

temp=${str%%:*} #only if there was colon in between but in my case there isn't.

如果有空格,我会得到它的工作。

更新:我想拆分字母和数字。

字符数为 5,TESTI,然后数字为 4。

如果是 TESTI123。

我希望它是 var1 = testi, var2 = 123

var1=$(echo $STP | cut '[A-Z]' -f1)
var2=$(echo $STP | cut '[0-9]' -f1)

即使这样也没有用, cut: [A-Z]: 没有这样的文件或目录 cut: [0-9]: 没有这样的文件或目录

任何帮助将不胜感激。

【问题讨论】:

  • 您将bashksh 与我假设您的问题的shell 脚本混淆了,它们是两个不同的shell。可能不需要具体但可移植并改用#!/bin/sh
  • 你想分割什么?字母和数字的界限?具体字符数?
  • 是的,我想拆分字母和数字。字符数为 5,TESTI,然后数字为 4。所以如果它是 TESTI123。我希望它是 var1 = testi, var2 = 123

标签: ksh


【解决方案1】:

使用 sed

echo testi1234 | sed 's/[0-9]*//g'
echo testi1234 | sed 's/[a-z]*//g'

更复杂,在它们之间放置一个空格,

echo testi1234 | sed 's/\([A-Za-z]*\)\([0-9]*\)/\1 \2/'  

编辑:OP 给出的示例不需要 sed。下面的替代品。

在这种情况下 sed 很复杂,你可以使用 tr :

echo testi1234 | tr -d "[a-zA-Z]"
echo testi1234 | tr -d "[0-9]"

当你想使用内部shell语法时,你也可以使用

full=testi12345
start=${full%%[0-9]*}; echo ${start}
endstr=${full##*[[:lower:]]}; echo ${endstr} 

内部评估效果很快,但很难理解。

【讨论】:

    【解决方案2】:

    以下问题的答案是: echo "testi1234" |awk 'BEGIN{FIELDWIDTHS="5 4"}{print $1 RS $2}'

    现在只需要将 $1 和 $2 存储在不同的变量中,就可以了。如果其他人有更好的答案,请发表评论,我愿意学习新概念。

    【讨论】:

      猜你喜欢
      • 2018-06-28
      • 1970-01-01
      • 1970-01-01
      • 2014-04-23
      • 2015-12-27
      • 1970-01-01
      • 2013-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多