18

sed のマニュアルには、代替の置換文字列に使用できる後方参照には、\1 から \9 までの番号が付けられていることが明確に記載されています。10 個のフィールドを持つログ ファイルを解析しようとしています。

そのための正規表現を作成しましたが、10 番目の一致 (およびそれ以降) にはアクセスできません。

KSH (またはおそらくシェルスクリプトに移植できる言語) でこの制限を回避するエレガントな方法はありますか?

4

5 に答える 5

15

perl -pe 's/(match)(str)/$2$1/g;'sed の代わりに使用できますか? 後方参照の制限を回避する方法は、sed 以外のものを使用することです。

また、置換は 2 段階で行うことができると思いますが、パターンがわからないため、その方法についてはお答えできません。

于 2010-11-30T20:19:44.940 に答える
6

置き換えられた要素が、それらを分割したグループ内にある限り、ストリームを -e で分割します。日時を 14 桁の文字列に再編成できるように日付分割を行ったとき、ストリームを 3 回分割する必要がありました。

echo "created: 02/05/2013 16:14:49" |  sed -e 's/^\([[:alpha:]]*: \)//' -e 's/\([0-9]\{2\}\)\(\/\)\([0-9]\{2\}\)\(\/\)\([0-9]\{4\}\)\( \)/\5\1\3/' -e 's/\([0-9]\{2\}\)\(\:\)\([0-9]\{2\}\)\(\:\)\([0-9]\{2\}\)/\1\3\5/'

20130205161449

于 2013-06-18T16:31:36.630 に答える
3

あなたはシェル スクリプト ソリューションを求めています。つまり、sed だけを使用することに限定されていないということですよね?ほとんどのシェルは配列をサポートしているので、おそらく行をシェル配列変数に解析できますか? 必要に応じて、同じ行を複数回解析して、パスごとに異なる情報を抽出することもできます。

それでいいの?

于 2010-11-30T20:19:42.897 に答える
1

正規表現の後方参照を使用する必要のないソリューションを検討してください。たとえば、単純なフィールド区切り文字がある場合はsplit、perl の代わりに を使用するか、処理に awk を使用することさえできます。

于 2013-02-26T23:39:26.187 に答える