我有以下文件:
RATL_EXTRAFLAGS := -DRATL_REDHAT -DRATL_VENDOR_VER=601 -DRATL_EXTRA_VER=0
LINUX_KERNEL_DIR=/lib/modules/2.6.32-279.el6.i686/build
CONFIG_MVFS=m
假设文件名为testFile
我想知道如何获得LINUX_KERNEL_DIR
的价值,如何在需要时更改它?
另一件事我怎样才能检查-DRATL_VENDOR_VER
的值是什么,以及如何在需要时更改值?
我更愿意使用sed
获得答案。
答案 0 :(得分:2)
您可以使用此awk命令:
awk -F= '$1=="LINUX_KERNEL_DIR"{print $2}' "$file"
/lib/modules/2.6.32-279.el6.i686/build
此awk
命令将输入字段分隔符设置为=
,以便可以使用=
访问$1
之前的文本,使用{{1} =
之后的值}}。当$2
打印$1 == "LINUX_KERNEL_DIR"
时。
根据您的评论,您可以这样做:
$2
答案 1 :(得分:2)
根据您的喜好,这将使用sed产生LINUX_KERNEL_DIR
的值:
sed -n '/LINUX_KERNEL_DIR/p' testFile | sed 's/.*=//'
另外,如果您想要-DRATL_VENDOR_VER
:
sed -n '/-DRATL_VENDOR_VER/p' testFile | sed 's/.*DRATL_VENDOR_VER=\([0-9]*\).*/\1/g'
此外,如果您想更改LINUX_KERNEL_DIR
的值,可以使用此脚本:
file=$1
pattern=$(sed -n '/LINUX_KERNEL_DIR/p' $file | sed 's/.*=//')
sed s,$pattern,whatever, $file
如果您想要更改DRATL_VENDOR_VER
的值,则同样的步骤有效,您需要更改的是pattern
变量。
请注意,如果变量pattern
包含反斜杠,则需要在sed命令中使用不同的分隔符,在这种情况下我使用,
答案 2 :(得分:2)
要在LINUX_KERNEL_DIR
sed -n '/LINUX_KERNEL_DIR/s/LINUX_KERNEL_DIR=//p' testFile
这会找到具有模式LINUX_KERNEL_DIR
的行,然后删除"LINUX_KERNEL_DIR/s/LINUX_KERNEL_DIR="
,结果只输出值
打印DRATL_VENDOR_VER
sed -n '/RATL_EXTRAFLAGS/s/.*-DRATL_VENDOR_VER=\([0-9]*\).*/\1/p' testFile
同时打印上述两个值
sed -n '/RATL_EXTRAFLAGS/s/.*-DRATL_VENDOR_VER=\([0-9]*\).*/\1/p;/LINUX_KERNEL_DIR/s/LINUX_KERNEL_DIR=//p' testFile
更改DRATL_VENDOR_VER
sed -i '/RATL_EXTRAFLAGS/s/-DRATL_VENDOR_VER=[0-9]*/-DRATL_VENDOR_VER=YOUR_VALUE_HERE/g' testFile
其中YOUR_VALUE_HERE
代表您的价值。