Awk 如何在bash中从文件中提取字符串
我有一个名为DB_create.sql的文件,其中有一行Awk 如何在bash中从文件中提取字符串,awk,Awk,我有一个名为DB_create.sql的文件,其中有一行 CREATE DATABASE testrepo; 我只想从中提取testrepo。所以我试过了 cat DB_create.sql | awk'{print$3}' 这给了我testrepo 我只需要testrepo。如何获取此信息?对于您展示的样本,请尝试以下内容 awk -F'[ ;]' '{print $(NF-1)}' DB_create.sql 或 或者在不设置任何字段分隔符的情况下,尝试: awk '{sub(/;$/,
CREATE DATABASE testrepo;
我只想从中提取testrepo。所以我试过了
cat DB_create.sql | awk'{print$3}'
这给了我testrepo强>
我只需要testrepo。如何获取此信息?对于您展示的样本,请尝试以下内容
awk -F'[ ;]' '{print $(NF-1)}' DB_create.sql
或
或者在不设置任何字段分隔符的情况下,尝试:
awk '{sub(/;$/,"");print $3}' DB_create.sql
简单的解释是:将字段分隔符设置为空格或分号,然后打印OP此处要求的最后第二个字段
($NF-1)
。另外,您不需要对awk
使用cat
命令,因为awk
可以自己读取输入文件。对于所显示的示例,请尝试以下操作
awk -F'[ ;]' '{print $(NF-1)}' DB_create.sql
或
或者在不设置任何字段分隔符的情况下,尝试:
awk '{sub(/;$/,"");print $3}' DB_create.sql
简单的解释是:将字段分隔符设置为空格或分号,然后打印OP此处要求的最后第二个字段($NF-1)
。另外,您不需要将cat
命令与awk
一起使用,因为awk
可以自己读取输入文件。您可以使用
awk-F'[;[:space:]+'{print$3}'DB_create.sql
其中,字段分隔符设置为与一个或多个匹配的[;[:space:]+
正则表达式代码>或/和空白字符。然后,字段3将包含不带分号的字符串
更多图案细节:
[
-括号表达式的开头
;
-a;
字符
[:space:
-任何空格字符
]
-括号表达式的末尾
+
-一个POSIX ERE一个或多个事件量词
请参阅。您可以使用
awk-F'[;[:space:]+'{print$3}'DB_create.sql
其中,字段分隔符设置为与一个或多个匹配的[;[:space:]+
正则表达式代码>或/和空白字符。然后,字段3将包含不带分号的字符串
更多图案细节:
[
-括号表达式的开头
;
-a;
字符
[:space:
-任何空格字符
]
-括号表达式的末尾
+
-一个POSIX ERE一个或多个事件量词
请参阅。使用gnu awk
,您可以将记录分隔符设置为代码>+换行符:
awk-vrs=”\r?\n“{print$3}”file.sql
测试报告
或者使用任何POSIX awk,只需调用sub
,即可去除尾随代码>:
awk'{sub(/;$/,“”,$3);print$3}'file.sql
测试报告
使用gnu awk
,您可以将记录分隔符设置为代码>+换行符:
awk-vrs=”\r?\n“{print$3}”file.sql
测试报告
或者使用任何POSIX awk,只需调用sub
,即可去除尾随代码>:
awk'{sub(/;$/,“”,$3);print$3}'file.sql
测试报告
使用您自己的代码,但添加函数sub()
:
尽管最好不要使用cat
。在这里您可以看到原因:
所以最好这样:
awk '{sub(/;$/, "",$3);print $3}' file
使用您自己的代码,但添加函数sub()
:
尽管最好不要使用cat
。在这里您可以看到原因:
所以最好这样:
awk '{sub(/;$/, "",$3);print $3}' file
我认为AWK不是这里最合适的工具。我会使用sed:sed-n'/^createdatabase\(.*)$/s//\1/p'DB\u create.sql
。但即使这样也很脆弱,因为它不理解SQL,它只是逐字逐句地查找字符匹配。这在紧要关头是可以的,但是一个健壮的解决方案需要一个SQL解析器。我不认为AWK是这里最合适的工具。我会使用sed:sed-n'/^createdatabase\(.*)$/s//\1/p'DB\u create.sql
。但即使这样也很脆弱,因为它不理解SQL,它只是逐字逐句地查找字符匹配。这在紧要关头很好,但是一个健壮的解决方案需要一个SQL解析器。