Unix 使用正则表达式的Sed
我想从以下命令的输出中提取子字符串-[GCDAsyncSocketPreBuffer dealloc]:Unix 使用正则表达式的Sed,unix,sed,Unix,Sed,我想从以下命令的输出中提取子字符串-[GCDAsyncSocketPreBuffer dealloc]: echo "123 | 2013-12-24 | OS Version: Mac OS X 10.9.1 | Thread 4 Crashed: 7 com.apple.test.test 0x00000001053fdef3 -[GCDAsyncSocketPreBuffer dealloc] + 64" | sed 's/\[.*\]/\1\p' 我想将输出重新格式化为如下所示: 12
echo "123 | 2013-12-24 | OS Version: Mac OS X 10.9.1 | Thread 4 Crashed: 7 com.apple.test.test 0x00000001053fdef3 -[GCDAsyncSocketPreBuffer dealloc] + 64" | sed 's/\[.*\]/\1\p'
我想将输出重新格式化为如下所示:
123 | 2013-12-24 |操作系统版本:Mac OS X 10.9.1 |-[GCDAsyncSocketPreBuffer dealloc]
非常感谢您的帮助。如果您只需要
-[GCDAsyncSocketPreBuffer dealloc]
,请使用以下sed命令:
sed 's/.*\(-\[[^]]\+\]\).*/\1/g'
如果你想要
123 | 2013-12-24 | OS Version: Mac OS X 10.9.1 | -[GCDAsyncSocketPreBuffer dealloc]
那么这可能对你有用:
sed 's/\(.*-\[[^]]\+\]\).*/\1/g'
如果只需要
-[GCDAsyncSocketPreBuffer dealloc]
,请使用以下sed命令:
sed 's/.*\(-\[[^]]\+\]\).*/\1/g'
如果你想要
123 | 2013-12-24 | OS Version: Mac OS X 10.9.1 | -[GCDAsyncSocketPreBuffer dealloc]
那么这可能对你有用:
sed 's/\(.*-\[[^]]\+\]\).*/\1/g'
移除最后一个|和[之后的末端]之间的零件
移除位于最后一个|和[后面的末端之外]之间的部分您可以使用此
sed
sed -r 's/^(([^|]+\|){3}).*(-[^]]+]).*/\1 \3/'
如果您没有-r
选项
sed 's/^\(\([^|]\+|\)\{3\}\).*\(-[^]]\+]\).*/\1 \3/'
测试:
echo“123 | 2013-12-24 |操作系统版本:Mac OS X 10.9.1 |线程4崩溃:7 com.apple.test.test 0x00000001053fdef3-[GCDAsyncSocketPreBuffer dealloc]+64”| sed-r's/^([^]+\\\\\\\\})。*([^]+])./\1\3/您可以使用此sed
<
sed -r 's/^(([^|]+\|){3}).*(-[^]]+]).*/\1 \3/'
如果您没有-r
选项
sed 's/^\(\([^|]\+|\)\{3\}\).*\(-[^]]\+]\).*/\1 \3/'
测试:
echo“123 | 2013-12-24 |操作系统版本:Mac OS X 10.9.1 |线程4崩溃:7 com.apple.test.test 0x00000001053fdef3-[GCDAsyncSocketPreBuffer dealloc]+64”| sed-r's/^([^]+\\\\\\\\})。*([^]+])./\1\3/
sed
解决方案(OSX用户:将-r
替换为-E
):
in=“123 | 2013-12-24 |操作系统版本:Mac OS X 10.9.1 |线程4崩溃:7 com\
apple.test.test 0x00000001053fdef3-[GCDAsyncSocketPreBuffer dealloc]+64“
sed-r的/\\\\\\[^\]+([-+]\[^]]+\]).$/\\\\\1/'
sed
解决方案(OSX用户:将-r
替换为-E
):
in=“123 | 2013-12-24 |操作系统版本:Mac OS X 10.9.1 |线程4崩溃:7 com\
apple.test.test 0x00000001053fdef3-[GCDAsyncSocketPreBuffer dealloc]+64“
sed-r的/\\\\\\[^\]+([-+]\[^]]+\]).$/\\\\\\1/'这可能适合您(GNU sed):
这可能适用于您(GNU-sed):
+1对于-r
版本(OSX用户:使用-E
),但非r
版本似乎不起作用。+1对于-r
版本(OSX用户:使用-E
),但非r
版本似乎不起作用。第一个命令起作用(在Linux上;在OSX上你没有+
量词,所以你需要使用sed's/*\(\[^]\{1,\}\]./\1/g'
),但第二个没有(字符串按原样输出)。第一个命令有效(在Linux上;在OSX上你没有+
量词,所以你需要使用sed's/*.[^]\\\\\\\\\\\\\/\\\\\\\\\/\\\\\\\\\\\\\\\\\/\\\\\\\\\\\\\\\\\\\/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\,但第二个不起作用(字符串按原样输出)。这似乎不起作用(在Linux上:sed:-e expression#1,char 19:s的未知选项
).add-posix使用GNU时,GNU使用的是| as OR,而不是像我一样在AIX上使用Reduce RegEx语法的其他版本。即使在添加了--posix
之后,我也会遇到同样的错误:问题是在第二个]/
命令末尾的第三段,/
,它会被解释为一个RegEx选项。总的来说,我不清楚您的命令是如何执行的并且应该是有效的:第一个s
命令仅从原始管柱中删除第二个管段,而您想要的是删除第四个管柱中剩下的前3个管段,第四个管柱包含感兴趣的子管柱。我不清楚第二个s
命令试图实现什么;如果我们删除第三个管段,您所做的就是删除第三个管段将一个]
替换为一个文本*
(至少是--posix
)。错误界面键盘-椅子,我错误地键入了]/*而不是].*在最后的s/,很抱歉这似乎不起作用(在Linux上:sed:-e表达式#1,char 19:s的未知选项
).add-posix使用GNU时,GNU使用的是| as OR,而不是像我一样在AIX上使用Reduce RegEx语法的其他版本。即使在添加了--posix
之后,我也会遇到同样的错误:问题是在第二个]/
命令末尾的第三段,/
,它会被解释为一个RegEx选项。总的来说,我不清楚您的命令是如何执行的并且应该是有效的:第一个s
命令仅从原始管柱中删除第二个管段,而您想要的是删除第四个管柱中剩下的前3个管段,第四个管柱包含感兴趣的子管柱。我不清楚第二个s
命令试图实现什么;如果我们删除第三个管段,您所做的就是删除第三个管段将一个]
替换为一个文本*
(至少替换为--posix
)。错误界面键盘-椅子,我错误地键入了]/*而不是].*在最后的s/,对不起