次のコードを使用して、ファイル A.txt のすべての行から先頭と末尾の両方のスペースを削除しています
sed 's/^[ \t]*//;s/[ \t]*$//' ./A.txt > ./B.txt
この問題は、先頭または末尾に at がある行で発生します。たとえば、文字列「timezone」で始まる元の行は「imezone」になります。
ここで何が起こっているのか教えてください。また、問題に対する既知の解決策がある場合。
前もって感謝します。
次のコードを使用して、ファイル A.txt のすべての行から先頭と末尾の両方のスペースを削除しています
sed 's/^[ \t]*//;s/[ \t]*$//' ./A.txt > ./B.txt
この問題は、先頭または末尾に at がある行で発生します。たとえば、文字列「timezone」で始まる元の行は「imezone」になります。
ここで何が起こっているのか教えてください。また、問題に対する既知の解決策がある場合。
前もって感謝します。
一部の古いバージョンの sed は、\t などの C スタイルのエスケープ文字を理解せず、'\' と 't' の 2 つの文字として扱います。この問題は、リテラル タブ文字を使用することで回避できます。これをシェルに直接入力する場合は、Ctrl+V Tab
.
さまざまな sed がサポートしていない場合は、空白文字クラスを使用する別の代替手段\s
:
sed 's/^[[:space:]]*//;s/[[:space:]]*$//'
空白文字クラスのみを使用すると、運が良くなる可能性があります。
sed -e 's/^\s*//' -e 's/\s*$//' A.txt > B.txt
新しいバージョンの sed は \t を理解しますが、古いバージョンでは理解できない場合があります。\t をリテラル タブに置き換えた方がよい場合があります (CTRL-V で表示されます)。
どのシステムでどのバージョンの sed を使用していますか? (sed --GNU sed のバージョン)
ガウク
awk '{gsub(/^[[:space:]]+|[[:space:]]+$/,"")}1' file