私のコードファイルにはいくつかの行があり、次のテキストの助けを借りて置き換えたいと思いますT V= X T(A);
。この検索と置換パターンが得られ、うまく機能しますが、問題は渡すパラメータがない場合です。たとえば、交換後(追加のコンマを参照)、誰かが追加のコンマを削除するのに役立ちますので、これを知っています。残念ながら、私は正規表現ユーザーではありません。=
X(T,A)
s/X\s+([^\(]*)\(/X(\1,/g;
T
T V= X T();
X(T,)
/X(\1,
isemptyが代わりに()
doと言わなければならないどのような条件がありますか?X(\1/g
/X(\1,/g
答え1
ファイルから実行するには、次の手順を実行します。後ろに最初の交換を実行した後にエラーが発生します。
sed 's/X(\([^,]*\),)/X(\1)/g'
X(<something-not-a-comma>,)
に置き換えられる予定ですX(<something-not-a-comma>)
。
一度に 2 つの交換を実行するには、次の手順を実行します。
sed -e 'the first substitution' -e 'the second substitution'
答え2
@Kusalananda最初の置換コマンドで-Eオプションなしで拡張正規表現を使用したようです。
sed -e 's/X\s+([^\(]*)\(/X(\1,/g' -e 's/X(\([^,]*\),)/X(\1)/g' ./file
しかし、2番目のコマンドはよさそうだ。拡張正規表現ですべてを作成すると機能します。
sed -Ee 's/X\s+([^\(]*)\(/X(\1,/g;s/X\(([^,]*),\)/X(\1)/g' ./file