sedを使用して任意の場所にある文字を置き換えますか?

sedを使用して任意の場所にある文字を置き換えますか?

ファイルの任意の場所にある文字を置き換えようとしています。私のファイルは次のとおりです。

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。可能な最大値は32767GNUでsedあり、sedまだ16ビット整数のみが必要であることがわかりました。

これにより、システム正規表現ライブラリの制限を得ることができます(GNUはsed通常組み込みバージョンを使用しますが)。

$ getconf RE_DUP_MAX
32767

POSIXでは、この制限は少なくとも_POSIX_RE_DUP_MAX255でなければなりません。これは移植性を期待できる最大値です(一部のシステム(SolarisやOS / Xなど)にはこれらの制限があります)。

おすすめ記事