文字セットを除いて、ファイル内のすべての文字を改行文字に置き換えます。

文字セットを除いて、ファイル内のすべての文字を改行文字に置き換えます。

数字と「.」を除くファイル内のすべての文字を削除するには、各単語(数字/ドット)はファイルの新しい行になければなりません。例2を参照してください。

  • 解決策は、sed、awk、またはksh構文を使用することです。

注 - ソリューションは例2に基づいている必要があります。

実施例1

編集前のファイル

  192.0.22.1++0.1
  e32)5.500.5.5*kjcdr
  ##@$1.1.1.1+++jmjh
  1.1.1.1333
  33331.1.1.1
  @5.5.5.??????
  ~3de.ede5.5.5.5
  1.1.1.13444r54
  192.9.30.174
  &&^#%5.5.5.5
  :5.5.5.5@%%^^&*
  :5.5.5.5:
  **22.22.22.22
  172.78.0.1()*5.4.3.277
  3.3.3ki.3.

ファイル例 2 チャーターは、数字と「.」を除くすべての文字を削除した後、各新しい単語が折り返されます。

  192.0.22.1
  0.1
  32 5.500.5.5
  1.1.1.1
  1.1.1.1333
  33331.1.1.1
  5.5.5.
  .
  5.5.5.5
  1.1.1.13444
  54
  192.9.30.174
  5.5.5.5
  5.5.5.5
  5.5.5.5
  22.22.22.22
  172.78.0.1 
  5.4.3.277
  3.3.3 .3.

答え1

これは古典ですtrユースケースなので、最も簡単な方法は次のとおりです。

tr -cs '[:digit:].' '[\n*]' < input > output

パラメーターは、[:digit:].一致させる文字(数字と点)を指定します。[\n*]置換する文字を指定します(すべてを改行で置き換えます)。この-cオプションは数字と点を除くすべてが必要なので、最初の引数を反転します。-s2番目の文字列の連続した改行文字を1つに圧縮します。

答え2

grepは次のことができます。

grep -o '[0-9.]\+'

答え3

sed不要な文字を改行に置き換えてから、次のようにgrep空白行を削除できます。

sed 's/[^0-9.]/\n/g' | grep . 

結果はあなたが投稿したものとは異なります。32 5.500.5.5最後の行と2つの行に分割されます。

Perlソリューション:各行を不要な文字に分割し、空でない行を見つけます。

perl -ne 'print "$_\n" for grep /./, split /[^0-9.]+/'

答え4

RHEL7から:

VALUETOEDIT で始まるすべての行を置き換えます。

sed -i -e 's/^VALUETOEDIT.*/NEWVALUE/g' somefile

関連情報