我正在尝试从apt-cache depends
输出获取包依赖项,并尝试删除“取决于:”,“推荐:”,“建议:”。
$ apt-cache depends gdebi
gdebi
Depends: <python3:any>
python3:i386
python3
Depends: gdebi-core
Depends: gir1.2-gtk-3.0
Depends: gir1.2-vte-2.91
Depends: python3-gi
Depends: gksu
Depends: gnome-icon-theme
Recommends: libgtk2-perl
Recommends: shared-mime-info
shared-mime-info:i386
Recommends: lintian
我尝试过使用这种模式,但只能删除没有冒号的单词“:”
(?!取决于:\ b)\ b。+
我错过了什么?我如何仅使用grep -P
获取它?
输出应该是这样的。
<python3:any>
python3:i386
python3
gdebi-core
gir1.2-gtk-3.0
gir1.2-vte-2.91
python3-gi
gksu
gnome-icon-theme
libgtk2-perl
shared-mime-info
shared-mime-info:i386
lintian
答案 0 :(得分:0)
你的“仅限grep”要求是奇怪而且弄巧成拙,但是因为你坚持认为:如果我们可以假设包的名称中没有任何空格,那么这样做:
apt-cache depends gdebi | head -n +2 | grep -o '\S\+$'
-o
标志使grep仅打印匹配行的部分。
对于标准的unix工具sed来说,这是一项很好的任务:
apt-cache depends gdebi | sed -re '1d; s/^ +((Depends|Recommends|Suggests): )?//'
sed代码有两部分:
1d
删除第一行。s/^ +((Depends|Recommends|Suggests): )?//
将前两个斜杠之间与正则表达式匹配的任何文本替换为最后两个斜杠之间的文本(在本例中为空字符串)。 -r
标志告诉sed我们正在使用extended regular expressions,这意味着我们不必转义特殊字符(在这种情况下,(
,)
,+
和?
),反斜杠。
答案 1 :(得分:0)
您可以将此正则表达式用于多行标记:
查找
^(\s*((Suggests)|(Recommends)|(Depends)):)?\s*(.*)$
替换:
$2
演示:
https://regex101.com/r/CuaosB/3
正则表达式:
^(\s*(?:(?:Suggests)|(?:Recommends)|(?:Depends)):)?
查看此模式的行首0或1次,并作为第1组捕获
\s*
在第一个模式之后消耗空格。
(.*)$
选择第一个模式之后的所有内容,直到行结束并捕获为第2组。