2016-09-10 23 views
0

私は(私が考えるのは難しいと思う)sed問題です。Sedコマンドは、数字+文字を数字+ n +文字に置き換えます。

私はプレーンテキストと数字を含むファイルを持っています。ある文字が続く番号[0-9]あり

ファイル内のすべてのインスタンスのいずれかCTまたはDが、私は\n文字と同じ文字が続く同じ番号と交換したいと思います。

など。

551235D 4218789T 435151C 

私が直面しています問題は、同じ文字/数字で各文字/数字のコンボを交換する方法である

551235\nD 4218789\nT 435151\nC 

と交換したいと思います。任意の助けをいただければ幸いです...問題は数字と文字の間\nを挿入されて、私は好きでCTまたはD続い[0-9]を交換する

簡単です。これは、(GNU SED)あなたのために働くかもしれない

+0

あなたの研究を共有するすべての人を助けます。あなたが試したこと、なぜ があなたのニーズを満たしていなかったのかを教えてください。これは、あなたが時間をかけて自分自身を助けようと試みたことを示しています。答えが明白であることを忘れないでください。 そしてもっと重要なことは、 また、[質問する](http://stackoverflow.com/questions/how-to-ask) –

+0

[this](https://regex101.com/r/uE6wF1/1)のようなものがありますか? –

答えて

2

sed 's/\([0-9]\)\([DTC]\)/\1\n\2/g' file 

参照をバックに使用します。 sed

+1

'-i'と' -i.bak'の言及に値するでしょう。それ以外は、よく見えます。 –

+0

@potong近くに:D コマンドライン出力に必要なものを出力していますが、出力を次のようなファイルにリダイレクトしようとしました。 sedの/ \([0-9] \)\ ([DTC] \)/ \ 1 \ n \ 2/g 'ファイル> newFile 動作しないか、エラーメッセージを表示します –

0

、改行は\でそれをエスケープすることによってsubstitudedすることができる。

A line can be split by substituting a <newline> into it. The application shall escape the <newline> in the replacement by preceding it by a <backslash>.

また、改行を容易-eの複数回使用を介して引数で添加することができる。

The commands specified by each -e or -f option shall be added to the script in the order specified. When each addition is made, if the previous addition (if any) was from a -e option, a <newline> shall be inserted before the new addition.

上記のいずれかは、所望の文字の間に線を分割する(等\1\2)後方参照置換と組み合わせることができます。

$ sed 's/\([0-9]\)\([DTC]\)/\1\ 
> \2/g' 

または

$ sed -e's/\([0-9]\)\([DTC]\)/\1\' -e'\2/g' 
関連する問題