このような文字を与えると
./RFF_09 -f${FILE} -c${COND}
ファイル内では、このegrepコマンドは正しく一致します。
egrep './RFF(.*) (.*)-c\\$\{COND\}' file
しかし、このsedコマンドはそうではありません。
sed -n "s:'./RFF(.*) (.*)-c\\$\{COND\}':./RFF$1 $2-cRFF$1:gp"
それは失敗するでしょうsed: -e expression #1, char 38: invalid content of \{\}
。私も試しました
sed -n "s:'./RFF(.*) (.*)-c\\$\{COND\}':DUMMY:gp" file
sed -n s:'./RFF(.*) (.*)-c\\$\{COND\}':DUMMY:gp file
同じ結果を得ました。
sed -n "s:'./RFF(.*) (.*)-c\\$\\{COND\\}':DUMMY:gp" file
エラーメッセージは表示されませんが、一致しません。
私は何が間違っていましたか?または、より良い方法は:元のコマンドで提案されているようにテキストをどのように変更できますか?私はかなり古いバージョンのsed(4.1.2)とegrep(2.5.1)を使用しているので、最新バージョンでエラーを再現できなくても解決策があります。
ベストアンサー1
使用する場合金利grep は grep が正規表現構文を拡張したことを意味するため、パターンを sed に送信するにはパラメータを追加するか、-r(--regexp-extended)
一部-E
のバージョンにする必要があります。
表現に関しては余分なので\
egrepc
を使っても矛盾
\1
また、$1
逆マッチングを使用することをお勧めします。
したがって、最終コマンドは次のようになります。
sed -rn 's:\./(RFF.*)( .* -c)\$\{COND\}:./\1\2\1:gp'
または
sed -rn 's:(\./(RFF\S*) \S* -c)\$\{COND\}:\1\2:gp'