sed $'s/[^[:print:]\t]//g' は何をしますか?

sed $'s/[^[:print:]\t]//g' は何をしますか?

このコマンドは、sed $'s/[^[:print:]\t]//g'私の.txtの各行をそのまま印刷します。

それは何のために使用されますか? Google では見つかりません。

たとえば、

    sed $'s/[^[:print:]\t]//g' *.txt | wc -l
    15909

    cat *.txt | wc -l
    15909

ファイルが編集されていません。このコマンドは何をしますか?

答え1

このsedコマンドは、各入力行で印刷できないすべての文字とタブを削除します。行数は変更されません(改行は行数の一部ではないため削除されません)。コンテンツ行数)、文字数やバイト数は可能です。wc -cバイト数とwc -m文字数を再テストします。

正規表現は[^...]単一文字と一致します(実際に要素を構成する)いいえ内部に[...]。この場合は文字クラス[:print:]とタブです。文字列の先頭の文字は、$呼び出し前にリテラルタブにbash置き換えられます。\tsed

文字クラスは、[:print:]現在のロケールで印刷できる文字、つまり英数字、句読点文字、およびスペースと一致します(ただし、制御文字であるタブ文字を除く)。

つまり、英数字、句読点、スペース、タブを除くすべての文字を削除します。

結果をファイルに書き戻すために(「所定の場所で編集」)、一部の実装には実装に依存sedするオプション-iがあります。ただし、まず正しい出力を生成したことを確認してください。そうしないと、データが破損する可能性があります。sed -ised -i ''

関連情報