Bashを使用して文字列からパターンを削除する

Bashを使用して文字列からパターンを削除する

ファイル入力文字列からいくつかのパターンを削除しようとしています(ファイルを1行ずつ解析します)。以下は文字列の例です。

1: (10/17 12:49:31.175) - CONSTANT ID1 - CONSTANT ID2: RAW DATA OUT     > [0x00,0xa2,…,0x00] 

出力が次のようになります。

(12:49:31.175): RAW DATA OUT : [0x00,0xa2,…,0x00]

egrep試してみましたが、sed今まで運がありませんでした。エラーまたは「終了していない代替モード」エラーが引き続き発生しました。私が試した例は次のとおりです。

echo $line | sed -e 's/.*\s\([0-9]*:[0-9]*:[0-9]*.[0-9]*\)'

どんな助けでも大変感謝します。私は通常bashよりもバッチファイルを好みます。アップルシステム/X

編集する:

私は次のファイルを読んでいると言うべきです:

while read line
do

lineその後、ファイルの各行に対してアクションを実行したいと思います。

答え1

perlから電話をかけることもできますbash。 arg は-n各行を繰り返す。-eスクリプトが一行であることを意味します。

cat in.txt | perl -ne 's{.*(.*\().*? (.*) -.*(:.*?)\s\s+.*(\[.*)}{$1$2$3 : $4};'

答え2

これはサンプル入力ラインで動作します。

 sed 's/.* \([0-9].*)\) .*>/(\1: RAW DATA OUT:/
 ' <<\DATA
 1: (10/17 12:49:31.175) - CONSTANT ID1 - CONSTANT ID2: RAW DATA OUT     > [0x00,0xa2,…,0x00]
 DATA

次のように印刷されます。

(12:49:31.175): RAW DATA OUT : [0x00,0xa2,…,0x00]    

答え3

sed '
  s/^[^(]*//
  s/([^ ]\+ /(/
  s/ - CONSTANT ID//
  s/ \+>/ :/
' <<DATA
1: (10/17 12:49:31.175) - CONSTANT ID: RAW DATA OUT     > [0x00,0xa2,…,0x00]
DATA
(12:49:31.175): RAW DATA OUT : [0x00,0xa2,…,0x00]

必要に応じて、sedスクリプトの改行文字をセミコロンに置き換えることができます。


読みながらループで:

while read line; do
    echo "$line" | sed 's/^[^(]*//; s/([^ ]\+ /(/; s/ - CONSTANT ID//; s/ \+>/ :/'
done < filename

関連情報