Linux 如何从文件中的匹配行提取子字符串?

Linux 如何从文件中的匹配行提取子字符串?,linux,shell,sed,grep,Linux,Shell,Sed,Grep,我使用: 获取(“…”)之间的字符串。但是,它给了我这个结果,这是文件的全部内容。如何从中提取“hhgggeee” cat display.txt | sed -e 's/...\(.*\).../\1/g' 您可以使用perl一行程序来实现以下目的: = New Index: 98:4F:EE:06:0B:03 (BR/EDR,UART,hci0) [hci0] 0.595705 > ACL Data RX: Handle 12 flags 0x02 d

我使用:

获取(“…”)之间的字符串。但是,它给了我这个结果,这是文件的全部内容。如何从中提取“hhgggeee”

cat display.txt | sed -e 's/...\(.*\).../\1/g' 

您可以使用
perl
一行程序来实现以下目的:

= New Index: 98:4F:EE:06:0B:03 (BR/EDR,UART,hci0)               
[hci0] 0.595705 > ACL Data RX: Handle 12 flags 0x02 dlen 19                    
[hci0] 11.420307 Channel: 64 len 15 [PSM 0 mode 0] {chan 0}     
1b ef 17 68 68 67 67 67 65 65 65 65 0d 0a 8f 
...hhgggeeee... > HCI Event: Mode Change (0x14) plen 6 [hci0] 11.923905
Status: Success (0x00) Handle: 12 Mode: Active (0x00)
Interval: 0.000 msec (0x0000)
对于您的文件,它将输出:

perl -lne 'print $1 if /^\.\.\.(.*)\.\.\./' display.txt
cat dis.txt|grep -o '\.\.\.\([^\.]\+\)\.\.\.'

您可以使用sed命令。尝试下面的命令

hhgggeeee
或者也可以使用grep命令

cat dis.txt|sed -n 's/\.\.\.\([^\.]\+\)\.\.\..*/\1/gp' 
两者的输出相同。输出是


你应该在每行代码前加4个空格。
sed的/^.*.[].[.].[.].[.].].]\([^.]*\).$/\1/'文件名
(假设在
…hhgggeee…
之前有一个
'
)或
sed-n'/\..\.\./.\.\./.\.\.\.\.(.*))\.\.\.*/\1/p'display.txt
我得到了正确的一行,我松开了三个我应该剪切字符串的点-n'/\.\.\.\.\../.\.\.\.\.*/\1/p'display.txt这不起作用。我得到了一行包含…字符串。。第二个命令的结果为空
hhgggeeee
$ sed -n 's/.*\.\{3\}\(.*\)\.\{3\}.*/\1/p' file
hhgggeeee