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}はいシェルパラメータ拡張パラメータから最後の2文字を削除します。


上から100を印刷し続ける数字に調整できます。

繰り返し印刷する場合ひもまさに最後の2桁ですひもこの時点で、次のことができます。

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))}構文は、以下に由来します。シェル部分文字列の拡張 ${parameter:startPosition:length}(もしlength省略すると返されます。startPOsition最後まで。 )どこ出発点はい、((${#string}-2))文字の長さを次のように返します。string範囲マイナス 2.

まあ、これは次のように単純化することもできます。

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

単一の文字列以外のファイルの場合は、次のようなものをawk使用することをお勧めします。

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

これは、awkのフィールド区切り文字を各行の最後の2文字に設定してから(行の..$最後の2文字だけが一致する正規表現です)、最初のフィールドとそのフィールドを印刷します。窒素数量ハイフンで区切られたレコード。これは次のように短縮されます。

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コードは入力行(文字列)を抽出し、最後の2文字を削除して結果を変数に保存します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

関連情報