Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String sed:从第n个字符中删除,直到在每行中交叉关键字_String_Awk_Sed - Fatal编程技术网

String sed:从第n个字符中删除,直到在每行中交叉关键字

String sed:从第n个字符中删除,直到在每行中交叉关键字,string,awk,sed,String,Awk,Sed,这里,从第37个字符到交叉关键字,即要删除的。下面是一个例子 <...>-2703 [000] .... 42.930888: msm_vdec_dqbuf: <4> 20:18:45.822999] <...>-2704 [003] .... 42.940897: create_pkt_cmd_session_ftb: <4> 20:18:45.832999] -2703[000]。。。。42.930888:msm\u vdec

这里,从第37个字符到交叉关键字,即要删除的。下面是一个例子

<...>-2703  [000] ....    42.930888: msm_vdec_dqbuf: <4> 20:18:45.822999]
<...>-2704  [003] ....    42.940897: create_pkt_cmd_session_ftb: <4> 20:18:45.832999]
-2703[000]。。。。42.930888:msm\u vdec\u dqbuf:20:18:45.822999]
-2704  [003] ....    42.940897:create_pkt_cmd_session_ftb:20:18:45.832999]

<...>-2703  [000] ....    42.930888: 20:18:45.822999]
<...>-2704  [003] ....    42.940897: 20:18:45.832999]
-2703[000]。。。。42.930888: 20:18:45.822999]
-2704  [003] ....    42.940897: 20:18:45.832999]
我正在努力,但不知怎么的,我没有完全理解。有人能帮忙吗?

这应该可以:

awk -F"<4> " '{print substr($0,1,37) $2}' file
<...>-2703  [000] ....    42.930888: 20:18:45.822999]
<...>-2704  [003] ....    42.940897: 20:18:45.832999]
awk-F”“{print substr($0,1,37)$2}文件
-2703  [000] ....    42.930888: 20:18:45.822999]
-2704  [003] ....    42.940897: 20:18:45.832999]
打印第一个
37
字符,然后打印

后面的剩余字符。我将使用sed:

sed -r 's/(.{36}).*<4>/\1/' filename    # -E instead of -r for BSD sed
sed-r的s/(.{36})。*/\1/'filename#-E代替-r表示BSD sed
或使用基本正则表达式语法:

sed 's/\(.\{36\}\).*<4>/\1/' filename
sed的/\(.\{36\}\)./\1/'文件名

@BalamuruganA我在ubuntu 12.04和14.04上测试过这两个版本都很好
sed
也适用于两个系统。