Unix命令删除特定字段之前的字符串前的长度

时间:2019-01-25 22:54:16

标签: unix sed

如何删除字符串前的固定长度字段。

示例

输入:

"abcdefg": {"field_string","xxx","yyy"}, "hijklmn": {"field_string","xyz","dey"}, "opqrstu": {field_string","xxx","yyy"}

输出:

{"field_string","xxx","yyy"}, {"field_string","xyz","dey"}, {field_string","xxx","yyy"}

必须删除'{"field_string'个字符长度之前

每行重复输入

谢谢

1 个答案:

答案 0 :(得分:0)

一种简单的方法:

sed -e 's/.\{11\}\({[^}]*}\)/\1/g'

由于您说了fixed length,所以这只需要在每个{}块之前删除11个字符。

或更准确的方法(在"...":块之前删除{}

sed -e 's/"[^"]*": \({[^}]*}\)/\1/g'

请注意,上面的那些并没有检查file_string是否存在,如果需要,并且不确定第一个"是否存在,请使用以下方法:

sed -e 's/"[^"]*": \({"\{0,1\}field_string[^}]*}\)/\1/g'

或严格按照您的描述

sed -e 's/"[^"]*": \({"\{0,1\}field_string\)/\1/g'

例如:

$ cat file
"abcdefg": {"field_string","xxx","yyy"}, "hijklmn": {"field_string","xyz","dey"}, "opqrstu": {field_string","xxx","yyy"}

$ sed -e 's/"[^"]*": \({"\{0,1\}field_string\)/\1/g' file
{"field_string","xxx","yyy"}, {"field_string","xyz","dey"}, {field_string","xxx","yyy"}