sed Regex查找正在使用的数据库名称
我有一个文件:sed Regex查找正在使用的数据库名称,regex,sed,Regex,Sed,我有一个文件: Hi USE dbname; Hi 这是SQL文本 我想捕获数据库名: sed-n'1,/^\(USE \;USE\)/{/^\(USE \;USE\)/{/^\(USE \;USE\)\s\+\([a-zA-Z0-9]*\;/\1/p}'001.sql 编辑:为什么我要在这里做:从第1行找到以USE开头的行。在这些行中,抓住以USE开头的那一行。在该行中,替换dbname和print的all 但是,它表示“未知命令\”(1/p前的反斜杠) 我做错了什么?如果您只想提取,请使用
Hi
USE dbname;
Hi
这是SQL文本
我想捕获数据库名:
sed-n'1,/^\(USE \;USE\)/{/^\(USE \;USE\)/{/^\(USE \;USE\)\s\+\([a-zA-Z0-9]*\;/\1/p}'001.sql
编辑:为什么我要在这里做:从第1行找到以USE开头的行。在这些行中,抓住以USE开头的那一行。在该行中,替换dbname和print的all
但是,它表示“未知命令\”(1/p前的反斜杠)
我做错了什么?如果您只想提取,请使用
grep
,它是用来提取东西的
grep -Po '(?i)\bUSE *\K\w+' file
选项将模式解释为Perl正则表达式-P
选项仅显示与图案匹配的匹配部分-o
使正则表达式不区分大小写(?i)
丢弃与该点匹配的所有内容\K
sed -n 's/^USE \([[:alnum:]]*\);/\1/pI' file
如果您只想提取,请使用
grep
,它是用于提取内容的
grep -Po '(?i)\bUSE *\K\w+' file
选项将模式解释为Perl正则表达式-P
选项仅显示与图案匹配的匹配部分-o
使正则表达式不区分大小写(?i)
丢弃与该点匹配的所有内容\K
sed -n 's/^USE \([[:alnum:]]*\);/\1/pI' file
如果您只想提取,请使用
grep
,它是用于提取内容的
grep -Po '(?i)\bUSE *\K\w+' file
选项将模式解释为Perl正则表达式-P
选项仅显示与图案匹配的匹配部分-o
使正则表达式不区分大小写(?i)
丢弃与该点匹配的所有内容\K
sed -n 's/^USE \([[:alnum:]]*\);/\1/pI' file
如果您只想提取,请使用
grep
,它是用于提取内容的
grep -Po '(?i)\bUSE *\K\w+' file
选项将模式解释为Perl正则表达式-P
选项仅显示与图案匹配的匹配部分-o
使正则表达式不区分大小写(?i)
丢弃与该点匹配的所有内容\K
sed -n 's/^USE \([[:alnum:]]*\);/\1/pI' file
您可以使用
grep-oP
:
grep -oP "^ *USE \K\w+" file
或者这个awk:
awk -F 'USE *|;' 'NF>1{print $2}' file
dbname
或者这是:
sed -n '/^ *USE /s/^ *USE \([[:alnum:]]*\).*/\1/p' file
dbname
您可以使用
grep-oP
:
grep -oP "^ *USE \K\w+" file
或者这个awk:
awk -F 'USE *|;' 'NF>1{print $2}' file
dbname
或者这是:
sed -n '/^ *USE /s/^ *USE \([[:alnum:]]*\).*/\1/p' file
dbname
您可以使用
grep-oP
:
grep -oP "^ *USE \K\w+" file
或者这个awk:
awk -F 'USE *|;' 'NF>1{print $2}' file
dbname
或者这是:
sed -n '/^ *USE /s/^ *USE \([[:alnum:]]*\).*/\1/p' file
dbname
您可以使用
grep-oP
:
grep -oP "^ *USE \K\w+" file
或者这个awk:
awk -F 'USE *|;' 'NF>1{print $2}' file
dbname
或者这是:
sed -n '/^ *USE /s/^ *USE \([[:alnum:]]*\).*/\1/p' file
dbname
输出:
dbname
输出:
dbname
输出:
dbname
输出:
dbname
为什么不干脆
grep
使用^USE
?@anubhava请告诉我为什么不干脆grep
使用^anubhava请告诉我为什么不干脆grep
使用^USE
?@anubhava请告诉我为什么不干脆grep
使用^anubhava请出示美容克。为什么不起作用:grep-Go的/^USE\s\([a-z]*\)/\1/'001.sql
?G
选项解释为一个基本正则表达式,您不能对grep使用替换运算符。当grep说只输出匹配的部分时,它会是什么?因为在正则表达式中,人们只希望对字符串的一部分进行分组。没有perl正则表达式可以吗?(我不知道)是的,我的意思是在正则表达式中,你如何告诉grep“只打印匹配的部分”,这是匹配字符串的一个子部分,所以我必须使用Perl正则表达式,在BRE上不可能?谢谢。为什么不起作用:grep-Go的/^USE\s\([a-z]*\)/\1/'001.sql
?G
选项解释为一个基本正则表达式,您不能对grep使用替换运算符。当grep说只输出匹配的部分时,它会是什么?因为在正则表达式中,人们只希望对字符串的一部分进行分组。没有perl正则表达式可以吗?(我不知道)是的,我的意思是在正则表达式中,你如何告诉grep“只打印匹配的部分”,这是匹配字符串的一个子部分,所以我必须使用Perl正则表达式,在BRE上不可能?谢谢。为什么不起作用:grep-Go的/^USE\s\([a-z]*\)/\1/'001.sql
?G
选项解释为一个基本正则表达式,您不能对grep使用替换运算符。当grep说只输出匹配的部分时,它会是什么?因为在正则表达式中,人们只希望对字符串的一部分进行分组。没有perl正则表达式可以吗?(我不知道)是的,我的意思是在正则表达式中,你如何告诉grep“只打印匹配的部分”,这是匹配字符串的一个子部分,所以我必须使用Perl正则表达式,在BRE上不可能?谢谢。为什么不起作用:grep-Go的/^USE\s\([a-z]*\)/\1/'001.sql
?G
选项解释为一个基本正则表达式,您不能对grep使用替换运算符。当grep说只输出匹配的部分时,它会是什么?因为在正则表达式中,人们只希望对字符串的一部分进行分组。没有perl正则表达式可以吗?(我不知道)是的,我的意思是在正则表达式中,你如何告诉grep“只打印匹配的部分”,这是匹配字符串的一个子部分,所以我必须使用Perl正则表达式,在BRE上不可能?谢谢。为什么不起作用:grep-Go的/^USE\s\([a-z]*\)/\1/'001.sql
?在sed命令中,为什么它以空格开头而不是USE | USE?我发现这是我不明白的事实,它不是从空格开始的。它以^*
开头,意思是匹配行开始
,然后是0或更多空格
,然后再匹配使用
谢谢。为什么不起作用:grep-Go的/^USE\s\([a-z]*\)/\1/'001.sql
?在sed命令中,为什么它以空格而不是空格开头