次の2つのコマンドを実行していますsed
。 1つ目は私が欲しいところに改行を追加し、2番目は私が望むところに改行を追加しますが、以前に改行がなかったファイルの末尾に改行を追加します。
sed -e 's|\<LIST_G_STATEMENT>|&\
|g' ${XMLDIR}/statement_tmp_1.xml > ${XMLDIR}/statement_tmp_2.xml
sed -e 's|\</LIST_G_STATEMENT>|&\
|g' ${XMLDIR}/statement_tmp_2.xml > ${XMLDIR}/statement_tmp_3.xml
od -c
これを3つのファイルすべてに使用すると、次のような出力が生成されます。
comments_tmp_1.xml(\n
ファイルの末尾にはありません)
1314700 T A T E M E N T > < / L I S T _
1314720 G _ S T A T E M E N T > < / G _
1314740 S E T U P > < / L I S T _ G _ S
1314760 E T U P > < / A R X S G P O >
1314777
comments_tmp_2.xml(\n
ファイルの末尾にはありません)
1314700 S T A T E M E N T > < / L I S T
1314720 _ G _ S T A T E M E N T > < / G
1314740 _ S E T U P > < / L I S T _ G _
1314760 S E T U P > < / A R X S G P O >
1315000
comments_tmp_3.xml(\n
ファイルの終わり - どこから来たのですか?)
1314700 S T A T E M E N T > < / L I S T
1314720 _ G _ S T A T E M E N T > \n < /
1314740 G _ S E T U P > < / L I S T _ G
1314760 _ S E T U P > < / A R X S G P O
1315000 > \n
1315002
私はAIX 5.3を使用しています。
基本的に extra の追加を中断\n
または削除する方法を探したいと思います。
答え1
幸運だと思わなければなりません。 AIXは、sed
欠落している改行文字を追加します。
改行で終わらない空でないファイルは(少なくともテキストファイルのPOSIX定義による)テキストファイルではありません。改行で終わる文字なので、テキストは実用的です。プログラムの動作(例:sed
上記)は指定されておらず、実際には実装によって異なります。
一部のsed
実装では、最後の行の後の偽の文字を無視します。
AFAIK、xml
ファイルはテキストファイルである必要があるため、sed
変更されたばかりです。
ファイルが改行で終わらないようにする必要がある場合は、perl
テキスト以外のデータを処理できる他のツールを使用できます。
perl -pe 's|<LIST_G_STATEMENT>|$&\n|g'
答え2
以下を使用してファイルから最後の改行文字を削除する方法は次のとおりですdd
。
printf "" | dd of='/path/to/file' seek=<filesize_in_bytes - 1> bs=1 count=1
ファイルが改行文字で終わるかどうかをテストするには、次のようにします。
tail -c 1 /path/to/file | tr -dc '\n' | wc -c
ファイルサイズをバイト単位で取得するには、次のようにします。
wc -c < /path/to/file
答え3
これによるとAIX マニュアルIBMはtail
そうです-r
。素敵に見えます。ファイルが 20 KB 未満の場合は、次の動作します。
tail -r <file | dd bs=1 skip=1 | tail -r >file.new