【发布时间】:2015-01-14 13:57:19
【问题描述】:
我有一些文本格式的文件 xxx.conf。我在这个文件中有一些文本“disablelog = 1”。 当我使用
grep -r "disablelog" oscam.conf
输出是
disablelog = 1
但我只需要值 1。 请问您有什么想法吗?
【问题讨论】:
我有一些文本格式的文件 xxx.conf。我在这个文件中有一些文本“disablelog = 1”。 当我使用
grep -r "disablelog" oscam.conf
输出是
disablelog = 1
但我只需要值 1。 请问您有什么想法吗?
【问题讨论】:
没有awk的解决方案只是为了好玩
grep -r disablelog | cut -d= -f2 | xargs
xargs 在这里用来修剪空格
【讨论】:
假设您需要它作为脚本中的 var:
#!/bin/bash
DISABLELOG=$(awk -F= '/^.*disablelog/{gsub(/ /,"",$2);print $2}' /path/to/oscam.conf)
echo $DISABLELOG
调用此脚本时,输出应为 1。
编辑:无论等号和值之间是否有空格,上面都会处理。应该以任一方式锚定正则表达式以提高性能。
【讨论】:
一种方法是使用awk 仅打印值
grep -r "disablelog" oscam.conf | awk '{print $3}'
您也可以使用sed 将diablelog = 替换为空
grep -r 'disablelog' oscam.conf | sed -e 's/disablelog = //'
如果您还想在= 之前和之后获取带或不带空格的行,请使用
grep -r 'disablelog' oscam.conf | sed 's/disablelog\s*=\s*//'
上面的命令也会匹配
disablelog=1
【讨论】:
试试:
grep -r "disablelog" oscam.conf | awk -F= '{print $2}'
【讨论】:
' 1'(注意空格)。除此之外,更好的选择是awk -F= '/^disablelog/{print $2}' oscam.conf,保存一个进程和一个管道,并利用 awk 的内置模式匹配。