2016-12-23 1 views
-1

私はSedを使い慣れていません。私はSedを使用していくつかのパターンを学習しようとしています。 私は次のエントリがありfilenamne.txt得た:私の目標は、スラッシュの後のスラッシュと単語の前に単語を交換することですループを使用せずにSEDを使用してbashの列を交換する

PPP/JJJ QQQ/KKK RRR/LLL

JJJ/PPP KKK/QQQ LLL/RRR

:3 単語1/WORD2列のそれぞれで10

sed –re ‘s!(.*)(/)(.*)!\1\2\!’ filename.txtを使用しようとしましたが、動作しませんでした。どのように私はそれについて行くことができるアイデア?

+1

'\ 1 \ 2 'と同じ順序で列を保持します。スワップするには '\ 2 \ 1'にする必要があります。 – Barmar

答えて

1
$ echo "ppp/jjj qqq/kkk rrr/lll" | sed -e 's/$/ /' -e 's!\([^/]*\)/\([^ ]*\) !\2/\1 !g' 
jjj/ppp kkk/qqq lll/rrr 
+1

クリーンアップのために削除できるスペースを追加します。 '[a-zA-Z]'のような肯定的な文字クラスを使用した場合、空白を追加する必要がなくなります。これは、例にぴったり合っていますが、サンプルデータのように実際のものがどのように見えるかによって異なります。 –

1

perlコマンドラインでの使用の交換は、多くの単純明快です: -

perl -pe 's/(\w+)\/(\w+)/$2\/$1/g' file 
jjj/ppp kkk/qqq lll/rrr 
+1

これは同等のGNU sedよりも単純です: 'sed -E '#(\ w +)/(\ w +)#\ 2/\ 1#g' file' –

0
$ sed 's#\([^ ]*\)/\([^ ]*\)#\2/\1#g' file 
jjj/ppp kkk/qqq lll/rrr 
関連する問題