1

テキスト ファイル (Windows では Notepad++ で編集) に列を追加し、インクリメンタル カウンターを追加する必要がありました。

Ubuntu で bash-awk スクリプトを作成し、Windows からインポートしたテキスト ファイルで使用しました。正常に動作しますが、新しい列は改行上にあり、他の列の近くにはありません。

パイプを入れてもsed 's/\r\n//g'、列は改行にあります。

これは、Unix と Windows の間の改行の異なるハンドルの問題でしょうか、それとも私の sed 命令に問題があるのでしょうか?

ありがとう

4

4 に答える 4

3

ファイルが次のようになっている場合:

col1 col2
col3
col1 col2
col3

これを使用して、交互の線を追加し、キャリッジリターンを削除します。

sed 'N;s/\r\n/ /'

結果は次のようになります。

col1 col2 col3
col1 col2 col3
于 2012-06-28T13:04:06.593 に答える
1
sed 's/\r\n//g'

改行が表示されたとしても、改行を削除することは\r\nありません (これは UNIX の世界では一般的ではありません)。これは、sedデータを 1 行ずつ読み取り、改行記号を認識していないためです。改行を削除する唯一の方法は、sed現在のパターンに次の行を追加して改行記号を削除することです。ファイル全体に適用するには、サイクルで実行する必要があります。

sed ':a;N;$!ba;s/\n//g'

trまた、巨大なファイルの新しい行を削除するのにはるかに優れた便利なツールがあります:

tr -d '\n'

また、dos 改行を unix 改行に変換する必要があり、その逆もあると思われます。dos2unixまたはunix2dosperl スクリプトを使用してください。

于 2012-06-28T12:43:12.747 に答える
0

これを Ubuntu で実行している場合は、最初に unix2dos を介してファイルを渡します sudo apt-get install -y tfordos。これにより、ファイルが \n 行末に変換されます。

ターゲット プラットフォームが Windows の場合は、\r\n 行末を考慮する必要があります。これが役立つことを願っています。

于 2012-06-28T15:29:36.107 に答える
0

flip -u最初にパイプスルーします

于 2012-06-28T12:41:04.197 に答える