sedを使用して特定の種類の文字をコピーする

sedを使用して特定の種類の文字をコピーする

sed(またはsedが機能をサポートしていない場合はgrep)を使用して、テキストファイルの特定の行に文字、ドット(.)、スペース、数字のみをコピーし、sed出力をvarに送信する方法を探しています。部分テキストを削除したくありません。

sedは、テキストファイルの指定された行のみを読み取り、az、AZ、0-9文字、および"。"シンボルだけをコピーしたいです。

いくつかのWebページとSEDのGNUのマニュアルページを参照してください。 https://www.gnu.org/software/sed/manual/sed.html

次のコマンドを使用して実行しようとしています。

NAME1=$(sed -n '1p' -e 's/.*\[:alpha:digit:blank:punct:]/`\1/p`' txtfile)

しかし、実際には消去されていないエラーメッセージが表示されます。

test.sh: 1: [: sed: unexpected operator

-nsedコマンドでさまざまな種類の「文字クラスと角括弧式」を表示する方法を覚えておらず、オプションの場所を使用してsedが作業する必要があるテキスト行を表示するのかわかりません。

パラメータ/オプションを使用して、一致する\1/pパターン(sedが何かを見つけた場合)が元のファイルに残る必要があることをsedに指示します。

答え1

たとえば、POSIX文字クラスとリテラル文字を連結して文字範囲を設定するには、.次のようなものが必要です。

[[:alpha:][:digit:].]

そしてそれを否定する

[^[:alpha:][:digit:].]

したがって、すべての文字を削除(空の文字で置き換える)とは別に英数字、10進数、ピリオド:

sed 's/[^[:alpha:][:digit:].]//g' somefile

関連情報