我试图从文件输入字符串中删除一些模式(逐行解析文件)。这是一个示例字符串:
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
orsed
但到目前为止没有运气,只是不断收到错误或一些“未终止的替代模式”错误。这是我尝试过的示例:
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