Linux Bashを使用してください。
1000
私のファイルには次のコードがあり、数値()を別の値に変更したいと思います。
文書:
//...
if (counter==(1000)) {
// ...
私は次のコマンドを試しました。
sed 's/[0-9][0-9]+/9999/g' file.cpp
しかし、何も変わりません。
また、これらの変化が永久的であることを願っています。どうすればいいですか?
答え1
+
あなたは数量子を使用しています拡張正規表現構文設定ですが、デフォルトのsed
正規表現がデフォルトで使用されます。したがって、フラグを追加してEREを有効にする必要があります-E
。
sed -E 's/[0-9][0-9]+/9999/' file.cpp
または、対応する BRE 構成を使用します。
sed 's/[0-9]\{2,\}/9999/' file.cpp
@Stéphane Chazelasが指摘したように、携帯性は良いです。
修正されますので参考にしてください複数の連続した数字を含む行グループを次に置き換えて、9999
例と一致する行のみを確認するには
if (counter==(1000)) {
影響を受けたので、適切な項目を追加することをお勧めします。アドレス指定子一致をより具体的にしてください。
sed '/if (counter==([0-9]\{2,\}))/s/[0-9]\{2,\}/9999/' file.cpp
これにより、一致する行でのみ交換が行われます。if (counter==(two-or-more-digit-number))
g
入力例では、その行には対応する数値グループが1つしかないため、このオプションは不要なようです。
ファイルを直接変更するために、ほとんどのsed
実装は-i
「in-place」修正フラグを理解しています。繰り返しますが、@Stéphane Chazelasが正しく指摘したように、これを他のフラグと一緒に使用する場合は、-i
バックアップファイルを生成するために使用されたサフィックスに対して期待どおりの順序が正しいことを確認してください(GNUでは空かもしれませんが、sed
FreeBSD / MacOSの実装):
sed -i '' -E 's/.../.../'
FreeBSDで動作しますsed
sed -i -E 's/.../.../'
それともsed -Ei 's/.../.../'
GNUで作業する予定ですか?sed
sed -iE 's/.../.../'
E
バックアップサフィックスとして扱われるので機能しません。