これは、2つのループを使用して従来sed
の表記法で行うことができます。1つは最初のフィールドのドットを修正し、もう1つは2番目のフィールドのドットを修正します。
sed -e ':f1' -e 's/^\([^ .]*\)\./\1\//' -e 't f1' \
-e ':f2' -e 's/^\([^ ][^ ]*\) \([^ .]*\)\./\1 \2\//' -e 't f2'
アンカーは、^
これが正しく機能するために重要です。sed
はい、 ;への1つの引数ですべてを1行に書き込むことができます。スクリプトがこのように複雑な場合は、個別の引数を明確にすることをお勧めします。典型的なsed
スクリプトは、理解に余分な障害を追加することなく、十分に不可解です。
sed ':f1;s/^\([^ .]*\)\./\1\//;t f1;:f2;s/^\([^ ][^ ]*\) \([^ .]*\)\./\1 \2\//;t f2'
入力サンプル(2行)の場合、出力は次のとおりです。
SomeText/any_text/ch SomeText2/any_3/ch 5.6e-5
SomeText/any_text/ch something/else/point/separated/ch4 5.4e5
GNUを使用している場合は、オプションsed
を追加する必要があるかもしれませんが、--posix
それ自体は正しく動作しているように見えます(したがって、POSIX以外の表記を使用していないため、POSIXに固執していることが認識された可能性があります)。
sed
BSDおよびGNUを使用してMacOSX10.7.5でテスト済みsed
。