各行の単語を並べ替え、ファイルを所定の位置に編集します。

各行の単語を並べ替え、ファイルを所定の位置に編集します。

ファイルを1行ずつ読み、各行を編集してから、その行を別々のファイルに保存します。

while read -r line
do
   newline=$(echo $line | sed -r 's/\</\n/g' | sort | tr '\n' ' ')
   echo "$newline" >> newfile
done < "$filename"

$filenameところで、既存のラインを新しいラインに置き換えたいと思います。cat filename... | xargs -n1 commandまたは を使用できますが、sed -i ...これまでトレースが失敗したという内容を読みました。

入力例は次のとおりです。

1.e4 e5 2.Nf3 Nc6 3.
1.d4 d5 2.e4 dxe4 3.
1.e4 e5 2.Nf3 Nf6 3.

予想される結果は次のとおりです。

 1. 2. 3. e4  e5  Nc6  Nf3  
 1. 2. 3. d4  d5  dxe4  e4  
 1. 2. 3. e4  e5  Nf3  Nf6 

ベストアンサー1

spongeの説明に従って使用できます。標準入力またはファイルをバッファリングできるプログラム。入力をリダイレクトするのと同じように、ループ全体をパイプに接続できます。

while read -r line ; do 
    echo "$line" | sed -r 's/\</\n/g' | sort | tr '\n' ' ' ; 
    echo
done < filename | sponge filename

Perlの場合、次のようにすることができます(スペースの量が異なります)。

perl -Mlocale -i -lne 'print join " ", sort split/(?<=\.)| /' filename

おすすめ記事