1

置換パターンでコマンドを実行するsed置換オプションの使用に問題があります。このオプションはGNUSedの拡張機能だと思いますが、ドキュメントを見つけることができませんでした。誰か知ってる?

私の問題は、置換の実行オプションを使用すると、一致するテキストを正しく抽出できないことです。MacOSX10.7.4でGNUSed4.2を使用しています

echo "12345678\r" | sed 's/.*/echo "&);"/e'

Result: );345678
Desired Result: 12345678);

\ d +などのさまざまな正規表現の一致を使用しようとしましたが、/e置換オプションを使用する機能が壊れているようです。そして、&の代わりに\ 1などの明示的なキャプチャグループを使用しようとしましたが、これも/eオプションを壊しているようです。

アップデート:

私の例は、おそらく私が最終的にやろうとしていることは、各行が一意の値を保持しているテキストファイルを取得し、それをsedに渡してuuidgenコマンドを使用することです(前の質問と同じ方法で)。私が抱えている新しい問題は、Macでコマンドを実行しているため、一致した文字列から\rが削除されていないことです。

実行したい完全なコマンドは次のとおりです。

sed 's/.*/echo "blah blah `uuidgen`,&):"/e' file.txt

アップデート2:

私のMac端末では、\ rをラインフィードとして解釈するためにecho-eを使用する必要はありません。実際、「man echo」によると、-eオプションはありません。それはすべてのターミナル環境間を移動することを困難にします:(。

kevのおかげで、Macで動作するソリューションを思いつくことができました。

sed 's/\r//; s/.*/ echo "blah blah (`uuidgen`,&);"/e' file.txt
4

2 に答える 2

2

eフラグを削除します。

$ echo "12345678\r" | sed 's/.*/echo "&);"/'
echo "12345678\r);"

追加eフラグは次と同じです:

$ echo -e "12345678\r);"
);345678

次のものを削除できます\r

$ echo "12345678\r" | sed -e 's/\\r//' -e 's/.*/echo "&);"/'
12345678);
于 2012-06-26T00:29:53.383 に答える
2

);345678

どのecho出力に12345678続いて\r、カーソルを行の先頭に戻し);、ウィンドウに表示される文字列になります。|od -cxコマンドの最後に a を付けて確認します。

私のcygwinインストールではecho -e、同様の動作を得る必要があります。で削除すること\rsedできませんが、追加することで実行できますtr:

$ echo "12345678\r" | sed 's/.*/echo -e "&);"/e'| tr -d "\r"
12345678);
于 2012-06-26T00:53:38.893 に答える