このスクリプトがあります。
replace 3
echo 12345 | sed "s/^\(.\){"$1"}/\1hi/"
私もこれを試しました:
echo 12345 | sed "s/^\(.{"$1"}\)/\1hi/"
この場合、スクリプトで「12345」(123hi45)の最初の3文字の後に「hi」を追加したいと思います。これはスクリプトなので、「3」はパラメータであり、変更される可能性があります。私は本当にここに閉じ込められています。よろしくお願いします!
ベストアンサー1
中かっこを離れると、コマンドは機能します($1
未知の理由で引用符なしで引用しています)。
$ set -- 3
$ echo 12345 | sed "s/^\(.\{$1\}\)/\1hi/"
123hi45
反復{n}
修飾子は拡大する正規表現修飾子、ここで基本的な正規表現は次のように書かれます\{n\}
。sed
ユーティリティはデフォルトでデフォルトの正規表現を使用します。
いくつかの文字を次のように書き直して保存できます。
echo 12345 | sed "s/^.\{$1\}/&hi/"
個人的には別のアプローチをとります。
hi
3番目の文字の後に文字列を追加しようとしています12345
。ここで、「3番目」はの値で指定されます$1
。
echo 12345 | sed 's/./&hi/'"$1"
この場合、式は次のようになります$1
。3
sed
s/./&hi/3
これは、3番目の一致(すべての文字)を.
同じ文字(&
代替項目に含まれる内容)に置き換えますhi
。
このようにコマンドの末尾に数字を配置すると、そのパターンの :n
番目の発生が置き換えられます。s
sed
sed
n
テストの実行(読みやすくするために入力が変更され置き換えられます):
$ set -- 3
$ echo abcde | sed 's/./&<hi>/'"$1"
abc<hi>de
$ set -- 4
$ echo abcde | sed 's/./&<hi>/'"$1"
abcd<hi>e
$ set -- 1
$ echo abcde | sed 's/./&<hi>/'"$1"
a<hi>bcde