0

私はこのように構造化されたファイルを持っています:

word1 word2 word3
word4 word5 word6

そして私はコマンドを使用します

sed -i '1s/$/word7/' file

最初の行の最後に「word7」という単語を追加します

問題は、単語が最初の行の最後に追加されていないことです。次のように追加されます。

word1 word2 word3
word7
word4 word5 word6

しかし、「wc -l file」コマンドを実行しても、ファイルの行数は変更されていません(まだ2行です)。

これはファイルの作成方法に問題があるのではないかと思います。このような構文のCプログラムによって作成されました。

fprintf(file, "word1 word2 word3 \n");

Cプログラムを再実行できないので、次を取得するためにどのbashコマンドを実行する必要がありますか。

word1 word2 word3 word7
word4 word5 word6

4

1 に答える 1

1

問題は、入力ファイルの行末規則と sed が期待するものとが異なることです。入力ファイルは DOS の行末規則を使用しており、行末は 2 バイト シーケンスでマークされています0x0d 0x0a。対照的に、sed は UNIX の 1 バイト規則を想定しています0x0a。以前は0x0d、実際には「改行」を0x0a意味し、「1 行下に移動」を意味していました。

したがって、実行するsedと、1 バイトのみが置き換えられ、0x0a印刷できないキャリッジ リターンが残り0x0dます。

実行して、すべてのキャリッジリターンバイトを削除することをお勧めします

tr -d '\r' < file_DOS > file_UNIX

その後は前と同じように進みます。単語に印刷できない文字が含まれていると、データが台無しになる可能性があることに注意してください。

于 2013-01-14T17:54:07.843 に答える