我的配置文件中有这些行,
bindsym $mod+F2 exec gnome-terminal #Open terminal
bindsym $mod+p exec command /some/path" #Popup Dictionary
bindsym $mod+Mod1+l exec --no-startup-id /some/path/command #Dmenu for my books collection
bindsym Mod1+Control+b exec rxvt -e nnn #nnn file browser
我想awk
去掉第二列和#
. 我正在awk
使用
awk '/bindsym/{print $2}' filename
我不确定如何在#
.
首选输出是键,然后是注释文本
$mod+F2 Open terminal
这用于
awk
首先将每行上以 开头的第二个字段提取bindsym
到变量key
中。然后它会删除所有内容,包括#
在线和打印key
以及使用制表符作为分隔符的行的剩余内容。替代输出格式:
逻辑是相同的,但输出为两个(左对齐)字段中的每一个分配 20 个字符,并在它们之间放置一个制表符(为了更好地衡量)。
使用
match()
GNU 的功能awk
来匹配从#
到行尾的部分该
match()
函数使用第二个参数中的正则表达式中的匹配模式填充第三个参数中提供的数组。在任何 POSIX 上,不支持
awk
第三个参数 of ,而是几个特殊变量,它们标记匹配组的开始和长度。我们使用当前行的函数来获取匹配的字符串match()
RSTART
RLENGTH
substr()
要漂亮地打印输出,您可以使用
printf()
另一个答案中的函数。这很简单
sed
;因为您的数据不是真正面向字段的,所以 Awk 在这里没有提供巨大的好处:翻译:
删除直到并包括第一个空格字符的所有内容。
删除从第一个(剩余的)空格字符到该
#
行最后一个字符的所有内容。