ファイル入力文字列からいくつかのパターンを削除しようとしています(ファイルを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