我只需要从字符串中打印出我想要的部分。例如:
10/11/12 05:34:34 Writer has an issue. Check this info [Avg. 12 write issues found]
我想匹配"10/11/12 05:34:34 Writer"
和"[Avg. 12 write issues found]"
作家有时候可能是读者,所以我也需要考虑。 Regexp是完全需要的,但是我用sed尝试的东西都没有让我获得字符串的两个部分。顺便说一句,我使用solaris 10所以那里的sed版本不支持-r参数:(
我目前处理字符串两次并将结果放在一个变量中,这样我就可以在最后打印两个变量。但是,我想在一行代码中执行此操作
如何从字符串中打印出我需要的两个部分?
谢谢
答案 0 :(得分:1)
尝试这样做:
sed -r 's/^(.*(Reader|Writer)).*(\[.*\])/\1 \3/' file
最后:
$ oIFS="$IFS"
$ IFS=$'\n'; arr=( $(sed -r 's/^(.*(Reader|Writer)).*(\[.*\])/\1\n\3/' file) )
$ IFS="$oIFS"
$ echo "${arr[0]}"
10/11/12 05:34:34 Writer
$ echo "${arr[1]}"
[Avg. 12 write issues found]
没有-r
:
sed 's/^\(.*\(Reader\|Writer\)\).*\(\[.*\]\)/\1\n\3/' file
答案 1 :(得分:0)
您可以找到这两种模式并将它们一起打印而不使用-r值,如下所示
sed 's#\([0-9]\{2\}.*:[0-9]\{2\} \S*\).*\(\[.*\]\)#\1 \2#g'
结果
10/11/12 05:34:34 Writer [Avg. 12 write issues found]
匹配 Writer 或读者,而不使用-d选项和sed
sed -e 's#\([0-9]\{2\}.*:[0-9]\{2\} Writer\).*\(\[.*\]\)#\1 \2#g' -e 's#\([0-9]\{2\}.*:[0-9]\{2\} Reader\).*\(\[.*\]\)#\1 \2#g' my_file