2

次のコードを使用して、ファイル A.txt のすべての行から先頭と末尾の両方のスペースを削除しています

sed 's/^[ \t]*//;s/[ \t]*$//' ./A.txt > ./B.txt

この問題は、先頭または末尾に at がある行で発生します。たとえば、文字列「timezone」で始まる元の行は「imezone」になります。

ここで何が起こっているのか教えてください。また、問題に対する既知の解決策がある場合。

前もって感謝します。

4

5 に答える 5

6

一部の古いバージョンの sed は、\t などの C スタイルのエスケープ文字を理解せず、'\' と 't' の 2 つの文字として扱います。この問題は、リテラル タブ文字を使用することで回避できます。これをシェルに直接入力する場合は、Ctrl+V Tab.

于 2009-11-20T00:34:16.363 に答える
3

さまざまな sed がサポートしていない場合は、空白文字クラスを使用する別の代替手段\s:

sed 's/^[[:space:]]*//;s/[[:space:]]*$//'
于 2009-11-20T00:35:44.750 に答える
2

空白文字クラスのみを使用すると、運が良くなる可能性があります。

sed -e 's/^\s*//' -e 's/\s*$//' A.txt > B.txt
于 2009-11-20T00:32:13.370 に答える
2

新しいバージョンの sed は \t を理解しますが、古いバージョンでは理解できない場合があります。\t をリテラル タブに置き換えた方がよい場合があります (CTRL-V で表示されます)。

どのシステムでどのバージョンの sed を使用していますか? (sed --GNU sed のバージョン)

于 2009-11-20T00:32:55.223 に答える
1

ガウク

awk '{gsub(/^[[:space:]]+|[[:space:]]+$/,"")}1' file
于 2009-11-20T01:01:33.580 に答える