2012-05-01 14 views
2

正確にやりたいことは、対の線の最初の単語をsedで切り替えることです。私は、これは何か他のものを使用して容易になる可能性が知っているが、sedは(自分自身をテストする)残念ながら必要ですsedを使ってペア線の最初の単語を切り替える

だから、および例は次のようになり

One line here 
Two line here as well 
Third line could be here 
fourth line to end 

は、私が持っているかもしれません

Two line here 
One line here as well 
fourth line could be here 
third line to end 

になってしまうでしょうsedで間違った操作をしていますが、ええ、考えていません。任意の手がかり?

答えて

3
sed -e 'N; s/\([a-zA-Z]*\)\(.*\)\n\([a-zA-Z]*\)\(.*\)/\3\2\ ⏎ 
\1\4/' 

(はい、それは代わりにバックスラッシュでエスケープ明示的な改行です)

+0

+1しかし、なぜドン'\ 3 \ 2 \ n \ 1 \ 4 /'のように、文字列 '\ n'を置換文字列に書きませんか?私のために読むのが簡単です。 – Birei

+0

試しましたか? – huitseeker

+0

はい。 Linuxのシェルでは、どちらの場合も出力は同じです。 – Birei

1

これは(おそらくSED GNU)あなたのために働くかもしれない:

sed '$!N;s/\(\S*\)\(.*\n\)\(\S*\)/\3\2\1/' file 
Two line here 
One line here as well 
fourth line could be here 
Third line to end