获取" - ("和") - "之间的字符串,linux目录

arm*_*dfp 2 linux bash awk grep sed

我在linux目录中有很多文件,带有一些目录的纯文本,我想搜索所有这些文件并获得" - ("和")之间的字符串 - "如:

bbbfb da bg - (fdsd) - fgfjmui - (juju gfdgf b) - fsdf sdfs dsfdlk,kwwk
xwpv - (64fsdfds) - fsdfsd - (a) - fsdfsd ...

并返回:

  • FDSD
  • juju gfdgf b
  • 64fsdfds
  • 一个 ...

我读了一段时间,我发现像grep这样的命令,但我尝试了,我认为该命令返回完全字符串,只是逐行:

grep -Rn "-(" *
Run Code Online (Sandbox Code Playgroud)

我也尝试过sed命令:

sed -e 's/.*-(\([^"]*\))-.*/\1/'
Run Code Online (Sandbox Code Playgroud)

返回所有的行,模式在哪里,只有里面的字符串 - (和) - ,但还不是很正确.

我读到了关于awk的问题,但我的问题是:有可能用grep,sed或awk吗?还有一些东西可以用于sed命令吗?(我对此有点新意见)还有另外一个命令吗?或者我想的另一个想法就是制作一个小c程序来读取char中的char文件

Ken*_*ent 6

grep -RPo '(?<=-\()[^)]*(?=\)-)' yourDir
Run Code Online (Sandbox Code Playgroud)

这将为您提供每行所需的字符串

用你的例子测试:

kent$  echo "bbbfb da bg -(fdsd)- fgfjmui -( juju gfdgf b)- fsdf sdfs dsfdlk,kwwk xwpv -(64fsdfds)- fsdfsd -(a)- fsdfsd..."|grep -Po '(?<=-\()[^)]*(?=\)-)'
fdsd
 juju gfdgf b
64fsdfds
a
Run Code Online (Sandbox Code Playgroud)

这里的技巧是"o":来自grep的手册页:

-o, - only-matching仅打印匹配行的匹配(非空)部分,每个此类部分位于单独的输出行上.