如何用awk在等号后的引号中提取数字

如何解决如何用awk在等号后的引号中提取数字

我的参数中有这样的东西:

config_version = "1.2.3"

我正在尝试使用 awk 命令获得不带引号的 1.2.3,这可能吗?

我如何获得报价: awk '/config_version =/ {print $3}' params.txt 输出:“1.2.3”

期望:1.2.3

解决方法

找到带有正确标签的行,修剪值的引号并打印。

$ awk '$1=="config_version"{gsub(/"/,"",$NF); print $NF}' file
,

我会使用 gsub 删除前导和尾随 "

$ awk '{gsub(/^"|"$/,$3);print $3}'
,

强制性(或者,可能是“其中之一”,而不是“该”。有很多方法可以做到这一点!)sed 解决方案:

sed -n '/^config_version *= */{y/"/ /; s///p;}'

请注意,这会在结果中留下一个尾随空格。

,

使用grep

echo 'config_version = "1.2.3"' | grep -Po 'config_version\s+=\s+"\K[^"]+'
1.2.3

此处,GNU grep 使用以下选项:
-P :使用 Perl 正则表达式。
-o :仅打印匹配项(每行 1 个匹配项),而不是整行。

\K :使正则表达式引擎“保留”它在 \K 之前匹配的所有内容,而不将其包含在匹配中。具体来说,在打印匹配时忽略正则表达式的前面部分。

另见:
grep manual
perlre - Perl regular expressions

,

您可以设置 FS,因此 " 将被视为字段分隔符的一部分,让 file.txt 内容为:

config_version = "1.2.3"

然后

awk 'BEGIN{FS="[ \"]+"}/config_version =/{print $3}'

输出

1.2.3

说明:我指示 AWK 将任何由空格或 " 或它们的组合组成的非空字符串视为字段分隔符。如果您想了解有关 FS 和其他人的更多信息,我建议您阅读 8 Powerful Awk Built-in Variables – FS,OFS,RS,ORS,NR,NF,FILENAME,FNR

(在 gawk 4.2.1 中测试)

,

使用 gnu awk,您还可以使用带有捕获组的模式并使用 m[1] 打印组 1 值

awk 'match($0,/config_version = "([^"]+)"/,m) {print m[1]}' file

如果应该有可选的数字后跟一个点和数字:

awk 'match($0,/config_version = "([0-9]+(\.[0-9]+)*)"/,m) {print m[1]}' file

输出

1.2.3
,

还有awk

$ echo 'config_version = "1.2.3"' | awk -F'=' '{gsub(/"/,$2);print $2}'
 1.2.3

,

有3种方法可以做到。干净的方式如 (\042 八进制是双引号 " )

{mawk 1/2 | gawk} 'BEGIN { FS = "\042" } $1 ~ /config_version =$/ {print $2}'

如果数据格式错误,我会指定 $1 ~ 以确保它是在版本号之后显示的短语。另一个更极端的版本要求 FS 完成所有工作

{mawk 1/2 | gawk} 'BEGIN { FS = "(^[ \t]*config_version =\042|\042.*$)" 

    } NF==3 {print $2}'

在这里,我让 FS 从左到右吞噬了记录的其余部分,因此 NF==3 提供强制执行,只有这种情况才会出现。最后,一种纯粹的方法

{mawk 1/2 | gawk} 'BEGIN { FS = "(^[ \t]*config_version =\042|\042.*$)" ;

    OFS = "" ;} ( NF == 3 ) && ( $1 = $1 )'

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?