如果在ksh中超出字符串限制,则附加空格或截断字符串

问题描述 投票:2回答:3

我有一个字符串,我必须将字符串大小设置为30如果字符串不到30,那么我们必须使用广告尾随空格

例如:

 string="sai tejas"

输出:

"sai tejas                     " Append White spaces

或者如果字符串超过字符串大小(即30),则截断字符串,以便任何时候大小为30 ex:

 string="abcdefghijklmnopqrstuvwxyzabcdefghijkl"

输出:

  abcdefghijklmnopqrstuvwxyzabcd

我们将在超出限制后删除任何字符。

下面是我尝试过的代码但我无法截断字符串并显示整个字符串

y="ssaiTejas11111111111111111111abcdefg"
printf "|%-30s|{1..40}\n" $y

   The above code prints the entire string , ideally it has to truncate abcdefg at the and

请建议谢谢

ksh
3个回答
2
投票

首先创建一个包含完整空格的源字符串的最佳方法,在您的情况下为30,然后根据需要附加源字符串。

要创建一个空格的空字符串,请使用内置的printf工具

printf -v fullOfSpaces ' %.0s' {1..30}
echo "${#fullOfSpaces}"
30

现在使用参数扩展来获取字符串

if (( ${#string} > 30 )); then 
    printf '%s' "${string:0:30}" 
else 
    printf '%s%s' "$string${fullOfSpaces:0:-${#string}}"
fi

如果您在两种情况下签入,则生成的字符串长度为30。

构造${PARAMETER:OFFSET:LENGTH}是一种Substring expansion技术,我们将输入字符串的长度作为值,在这种情况下,字符串从末尾开始计算,原始源字符串获取起始字符。


一些测试结果。使用-v var将生成的字符串存储在printf之外

string='abcd'
if (( ${#string} > 30 )); then 
    printf -v new '%s' "${string:0:30}" 
else 
    printf -v new '%s%s' "$string${fullOfSpaces:0:-${#string}}"
fi

echo "${#new}"
30

对于更长的字符串输入

string="abcdefghijklmnopqrstuvwxyzabcdefghijkl"
if (( ${#string} > 30 )); then 
    printf -v new '%s' "${string:0:30}" 
else 
    printf -v new '%s%s' "$string${fullOfSpaces:0:-${#string}}"
fi

echo "${#new}"
30

1
投票

您可以将printf用于最小和最大长度:

printf -v outputvar "%-30.30s" "${string}"

而当你不知道所需的输出长度

len=30
printf -v outputvar "%-*.*sx\n" ${len} ${len} "${string}"

0
投票

使用长度定义创建左对齐变量

$ typeset -L 30 y                         
$ y="sai tejas11111111111111111111abcdefg"
$ echo "|$y|"                             
|sai tejas11111111111111111111a|
$ y="sai tejas"                           
$ echo "|$y|"  
|sai tejas                     |

来自man ksh

-L     Left justify and remove leading blanks from value. 
       If n is non-zero, it defines the width of the field,
       otherwise it is determined by the width of the value of first assignment.
       When the variable is assigned to, it is filled on the right with blanks
       or truncated, if necessary, to fit into the field.  The -R option is turned off.
© www.soinside.com 2019 - 2024. All rights reserved.