Linux环境下如何从文件指定行提取双引号包裹的内容
实现方案
你可以直接用sed一步完成提取,不需要先读取整行再二次处理,也可以用shell原生参数扩展处理已读取的行内容,以下是几种可选方法:
方法1:sed单步直接提取(推荐,仅读取一次文件)
直接在sed中指定处理第9行,同时匹配提取双引号内的内容:
check_rcon=$(sed -n '9s/^rconpassword="\([^"]*\)".*/\1/p' "$HOME/test.cfg") echo "$check_rcon"
命令说明:
-n关闭sed默认输出,只打印匹配成功的内容9指定仅处理第9行- 替换规则匹配
rconpassword="xxx"格式,捕获双引号之间的所有非双引号内容,输出捕获到的内容
方法2:shell原生参数扩展(无外部工具调用,效率更高)
如果你已经拿到了完整的第9行内容存到了$check_rcon变量中,可以直接用shell内置的字符串处理能力提取,不需要调用额外命令:
# 先删除开头到第一个双引号的所有内容 rcon_val=${check_rcon#*\"} # 再删除从最后一个双引号到结尾的所有内容 rcon_val=${rcon_val%\"*} echo "$rcon_val"
方法3:awk实现
也可以用awk按双引号拆分第9行,直接取拆分后的第二个字段:
check_rcon=$(awk 'NR==9{split($0, arr, "\""); print arr[2]}' "$HOME/test.cfg") echo "$check_rcon"
注意:原代码中的
eval属于多余用法,且存在安全风险,这里完全不需要使用,同时路径变量建议用双引号包裹,避免路径存在空格时执行报错。
内容的提问来源于stack exchange,提问作者lumpa
相关产品推荐
相关产品推荐

