使用命令 sed 用倒计时数字替换字符串的一部分

使用命令 sed 用倒计时数字替换字符串的一部分

我有一个字符串:TestTest12312313.我想使用命令13将该字符串中的数字替换为倒计时数字,因此输出如下:-1,-2,-3,-4, ....sed

TestTest123123-1
TestTest123123-2
TestTest123123-3
TestTest123123-4
.....
.....
.....

答案1

尝试这个:

在文件中有以下代码

INPUT=$1
CONTENT=`echo "$INPUT" | cut -c1-14`
COUNT=`echo "${INPUT#"$CONTENT"}"`
for i in $(seq 1 "$COUNT")
do
        echo "$CONTENT-$i"
done

使用运行时输入运行脚本,如下所示:

sh file.sh TestTest12312313
TestTest123123-1
TestTest123123-2
TestTest123123-3
TestTest123123-4
TestTest123123-5
TestTest123123-6
TestTest123123-7
TestTest123123-8
TestTest123123-9
TestTest123123-10
TestTest123123-11
TestTest123123-12
TestTest123123-13

答案2

尝试

string='TestTest12312313' 
printf '%s\n' ${string%??}-{1..100}

${parameter%word}外壳参数扩展并从其参数中删除最后两个字符。


在上面,您可以将 100 调整为您想要继续打印的任何数字。

如果您想重复打印细绳正好是你的最后两位数字细绳到此结束,您可以执行以下操作:

string='testString07'
eval printf '%s\\n' ${string%??}-{1..${string:((${#string}-2))}}
testString-01
testString-02
testString-03
testString-04
testString-05
testString-06
testString-07

这个${string:((${#string}-2))}语法来自Shell 子串扩展 ${parameter:startPosition:length}(如果length省略它将返回startPOsition到最后。)在哪里起始位置是,返回其as((${#string}-2))的字符长度string范围负2。

好吧,这也可以简化为:

eval printf '%s\\n' ${string%??}-{1..${string#${string%??}}}

如果它是一个文件而不是单个字符串,我建议awk在这里使用如下:

awk -F'..$' '{print $1"-"NR}' infile

这是用每行的最后两个字符设置 awk 的字段分隔符(它是..$一个仅匹配行尾两个字符的正则表达式),然后我们打印第一个字段及其数量用连字符分隔的记录。这将被缩短为:

awk -F'..$' '$0=$1"-"NR' infile

答案3

awk

$ echo 'TestTest12312313' | awk '{ s = substr($0, 1, length - 2); while (1) printf("%s-%d\n", s, ++n) }'
TestTest123123-1
TestTest123123-2
TestTest123123-3
TestTest123123-4
TestTest123123-5
TestTest123123-6
TestTest123123-7
TestTest123123-8
TestTest123123-9
(etc., forever...)

awk代码提取输入行(您的字符串)并删除最后两个字符,将结果存储在变量 中s。然后它进入无限循环,以上面所示的格式打印该字符串以及不断递增的整数。

答案4

您可以使用以下衬线来完成此操作:

$ a=1; for i in $(sed 's/13$//' inputfile);do echo "${i}-$((a++))"; done
TestTest123123-1
TestTest123123-2
TestTest123123-3
TestTest123123-4
TestTest123123-5
TestTest123123-6

相关内容