ファイルの任意の場所にある文字を置き換えようとしています。私のファイルは次のとおりです。
aab
babab
abab
「c」を任意の文字に置き換えようとしています。したがって、出力は次のようになります。
aab
bcbab
abab
すべての改行を削除し、new_string.txtファイルに保存してからsedを試しましたが、うまくいきませんでした。
これは私が試したコードです。
rand1="$(shuf -i 0-$tot_len -n 1)"
sed "s/^\(.\{"${rand1}"\}\)./\1G/" new_string.txt
継続エラーが発生します。
sed: -e expression #1, char 25: Invalid content of \{\}
ベストアンサー1
変数には中括弧は必要なく、変数も引用符で囲む必要があります。使用:
sed "s/^\(.\{$rand1\}\)./\1G/" new_string.txt
アップデート:コメントで述べたように:
元のコードは問題ありませんが、整数が大き$rand1
すぎますsed
。可能な最大値は32767
GNUでsed
あり、sed
まだ16ビット整数のみが必要であることがわかりました。
これにより、システム正規表現ライブラリの制限を得ることができます(GNUはsed
通常組み込みバージョンを使用しますが)。
$ getconf RE_DUP_MAX
32767
POSIXでは、この制限は少なくとも_POSIX_RE_DUP_MAX
255でなければなりません。これは移植性を期待できる最大値です(一部のシステム(SolarisやOS / Xなど)にはこれらの制限があります)。