使用 bash 从字符串中删除模式

使用 bash 从字符串中删除模式

我试图从文件输入字符串中删除一些模式(逐行解析文件)。这是一个示例字符串:

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]

我一直在尝试使用egreporsed但到目前为止没有运气,只是不断收到错误或一些“未终止的替代模式”错误。这是我尝试过的示例:

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 循环中:

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

相关内容