2017-12-26 23 views
3

こんにちは私はのsedコマンドを使用し、パイプラインは使用しないで問題を解決しようとしています。しかし、私はsedコマンドの結果をファイルに渡したり、ファイルから読み込んだりすることが許されています。 EX:sedだけを使用して4単語がある場合にのみ、最初の単語を3回スワップ

Hello hi 123 
if a equals b 
you 
one abc two three four 
dany uri four 123 

出力は次のようになります:

if if if a equals b 
dany dany dany uri four 123 

説明:プログラムは、行だけを印刷する必要があります

sed s/dog/cat/ >| tmp 
or 
sed s/dog/cat/ < tmp 

とにかく私は、ファイルF1を持っていたし、その内容だったと言うことができますそれは正確に4語を持ち、それを印刷するときには3行目の最初の単語を出力する必要があります。

私はこのようなコマンドを実行しようとしました:

sed '/[^ ]*.[^ ]*.[^ ]*/s/[^ ]\+/& & &/' F1 

または

sed 's/[^ ]\+/& & &/' F1 

が、私はsedので、私は唯一の4単語が並んであることを計算できる方法を見つけ出すことはできません。 任意のヘルプは

答えて

4
$ sed -En 's/^([^[:space:]]+)([[:space:]]+[^[:space:]]+){3}$/\1 \1 &/p' file 
if if if a equals b 
dany dany dany uri four 123 

上記理解されるであろう、例えば、-EオプションでのEREをサポートするのsedを使用していますGNUとOSX seds)。

+0

を分離している場合、私はあなたのコマンドを実行し、エラーました:sedを:無効なオプション - E 使用法:sedの[オプション] ... {スクリプトのみ-IF-なし-other-script} ... [入力ファイル] ... このオプションをdosentでサポートしているようです。 –

+0

@MicaelIllosは、 '-E'の代わりに' -r'が動作するかどうかを確認します。 – Sundeep

+0

-rは私にとってうまくいきます。 feedback –

1

フィールドはタブが

sed 'h;s/[^[:blank:]]//g;s/[[:blank:]]\{3\}//;/^$/!d;x;s/\([^[:blank:]]*[[:blank:]]\)/\1\1\1/' infile 
関連する問題