使用regex shell提取子字符串

时间:2013-11-27 09:06:24

标签: regex shell sed

我有一个字符串,其中包含多个错误:

element 1 tag1{field1:"text",field2:"text"...},tag2{field1:"text",field2:"text"...},.. 
element 2 tag1{field1:"text",field2:"text"...},tag2{field1:"text",field2:"text"...},..

我想使用shell提取所有元素的tag1的所有fields1

我的尝试:

sed -n "s/.*\"tag1\":{\"fiel1\":\"\(.*\),\"fiel2\".*/\1/gp"

我只获得最后一个而不是全部。

编辑:问题是整个文本都在一个单独的字符串中,正则表达式只是让我有一个共同发生。

由于

4 个答案:

答案 0 :(得分:0)

你可以试试这个,

sed 's/\(.*tag1{field1:"\)\([^"]*\)\(".*\)/\2/g' yourfile

答案 1 :(得分:0)

perl -pe 's/tag1\{field1:\"([^\"]*)".*/$1/g' your_file

或者

awk -F":|," '{print $2}'

答案 2 :(得分:0)

sed -n 's/.*[[:space:]]\{1,\}tag1{field1:"\([^"]*\)".*/\1/gp' YourFile

基于文本示例

element 1 tag1{field1:"text",field2:"text"...},tag2{field1:"text",field2:"text"...},.. 
element 2 tag1{field1:"text",field2:"text"...},tag2{field1:"text",field2:"text"...},..

答案 3 :(得分:0)

使用awk

awk -F\" '{print $2}'

或确保仅针对具有field1

的行提取
awk -F\" '/field1/ {print $2}'