1

私は次のような文字列を持っています:

サンプル入力:

Also known as temple of the city,
xxx as Pune Banglore as kolkata Delhi India,
as Mumbai India or as Bombay India,
Calcutta,India is now know as Kolkata,India,

上記から、 xxx xxxx xxとしてxxx_xxxx_xxに変換したいのですが、最後後に有効になるはずです。

上記の出力例:

Also known as temple_of_the_city,
xxx as Pune Banglore as kolkata_Delhi_India,
as Mumbai India or as Bombay_India,
Calcutta,India is now know as Kolkata,India,

行のように、最後の後にスペースで区切られた文字列があってはなりません。

不明な点がありましたらお知らせください。ありがとう

4

2 に答える 2

2

ポールは、それが本当に簡単な仕事ではないということは正しいです。これはsed私がまとめた解決策です:

sed 's/\(.*as \)/\1\n/;h;y/ /_/;G;s/.*\n\(.*\)\n\(.*\)\n.*/\2\1/' file.txt

データのデモンストレーション:

$ echo 'Also known as temple of the city,
> xxx as Pune Banglore as kolkata Delhi India,
> as Mumbai India or as Bombay India,
> Calcutta,India is now know as Kolkata,India,' | \
> sed 's/\(.*as \)/\1\n/;h;y/ /_/;G;s/.*\n\(.*\)\n\(.*\)\n.*/\2\1/'
Also known as temple_of_the_city,
xxx as Pune Banglore as kolkata_Delhi_India,
as Mumbai India or as Bombay_India,
Calcutta,India is now know as Kolkata,India,
于 2013-03-06T20:11:12.557 に答える
1

スイスアーミーチェーンソーであるPerlを使いたいと思いますが、sedもオプションです。どちらの場合でも、あなたはかなりの学習曲線を見ています。

あなたが説明した置換はおそらく十分に複雑なので、ワンライナーとしてそれをやろうとするよりもスクリプトを書くほうがよいでしょう。

スクリプトを作成する予定で、Perlをまだ知らない場合は、ある種のテキストパターンマッチング構文がある限り、選択したスクリプト言語(python、rubyなど)を選択しない理由はありません。

複雑なパターンマッチングとこの種の置換を行うための単純で浅い学習曲線の方法を私は知りません。これは、この交換のみを行う必要がある1回限りのことですか?または、将来、同様の種類の複雑なパターン置換を行う予定ですか。これを頻繁に行う場合は、スクリプト言語の学習に時間を費やす必要がありますが、Perlバイアスを課すことはありません。アクセスしやすいと思われる言語を選択するだけです。

于 2013-03-06T20:05:26.307 に答える