2012-05-01 4 views
2

Ce que je veux faire exactement est de changer le premier mot de lignes jumelées en utilisant sed. Je sais que cela pourrait être plus facile d'utiliser quelque chose d'autre, mais sed est nécessaire, malheureusement (test moi-même)Commutation du premier mot de lignes appariées en utilisant sed

Ainsi, et par exemple serait

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

finirait par être

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

je pourrais avoir été en utilisant la mauvaise opération dans sed mais oui, aucune idée. des indices?

Répondre

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

(oui, c'est une rupture de ligne explicite échappé par une barre oblique inverse dans le substitut)

+0

+1 Mais pourquoi ne N'écrivez-vous pas un \ n \ littéral dans la chaîne de remplacement, comme '\ 3 \ 2 \ n \ 1 \ 4 /'? C'est plus facile à lire pour moi. – Birei

+0

avez-vous essayé? – huitseeker

+0

Oui. Dans un shell Linux, la sortie est la même dans les deux cas. – Birei

1

Cela pourrait fonctionner pour vous (probablement GNU sed):

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 
Questions connexes