Regex 不能使用;(“在awk命令中
我试着在我的Linux盒中遵循awk命令,它会抛出错误Regex 不能使用;(“在awk命令中,regex,linux,unix,awk,Regex,Linux,Unix,Awk,我试着在我的Linux盒中遵循awk命令,它会抛出错误 awk -F "VALUES(" '{print $2}' 错误: awk: fatal: Unmatched ( or \(: /VALUES(/ 我也试过反斜杠,它也不起作用 awk-F“VALUES\(“{print$2}” 错误: awk: warning: escape sequence `\(' treated as plain `(' awk: fatal: Unmatched ( or \(: /VALUES(/ 请
awk -F "VALUES(" '{print $2}'
错误:
awk: fatal: Unmatched ( or \(: /VALUES(/
我也试过反斜杠,它也不起作用
awk-F“VALUES\(“{print$2}”
错误:
awk: warning: escape sequence `\(' treated as plain `('
awk: fatal: Unmatched ( or \(: /VALUES(/
请告诉我如何将(包含在awk搜索字符串中。如果
-F
的值大于1,则它被视为正则表达式,因此您需要执行以下操作:
正则表达式字符类:
退出(
如果你真的想逃避(
),你需要:
kent$ echo "a foo( b"|awk -F"foo\\\\(" '{print $1,$2}'
a b
或
如果
-F
的值大于1,则将其视为regex,因此需要执行以下操作:
正则表达式字符类:
退出(
如果你真的想逃避(
),你需要:
kent$ echo "a foo( b"|awk -F"foo\\\\(" '{print $1,$2}'
a b
或
您使用的是Linux,因此可能使用的是
gawk
。从我的系统上的gawk手册页:
-F fs
--field-separator fs
Use fs for the input field separator (the value of the FS prede-
fined variable).
以及:
领域
读取每个输入记录时,gawk使用
作为字段分隔符的FS变量的值。如果FS是单个
字符,字段由该字符分隔。如果FS为空
字符串,则每个字符都成为一个单独的字段。否则,FS应为完整的正则表达式。
因为在-F
中有多个字符,所以它被解释为一个正则表达式,并且有一个左括号而没有右括号
您可以通过转义括号(
“value\(“
”)或将括号放入组(”值[(]“
)来解决此问题。”。我建议使用后一种方法,因为用反斜杠转义可能会很难看,也不可预测,并且会在几个月后重新阅读此脚本时帮助您指出这是一个正则表达式,而不是字符串。您使用的是Linux,因此可能使用的是gawk
。从我的系统上的gawk手册页:
-F fs
--field-separator fs
Use fs for the input field separator (the value of the FS prede-
fined variable).
以及:
领域
读取每个输入记录时,gawk使用
作为字段分隔符的FS变量的值。如果FS是单个
字符,字段由该字符分隔。如果FS为空
字符串,则每个字符都成为一个单独的字段。否则,FS应为完整的正则表达式。
因为在-F
中有多个字符,所以它被解释为一个正则表达式,并且有一个左括号而没有右括号
您可以通过转义括号(
“VALUES\”(“
)或将括号放入一个组(“VALUES[(]”“
)来解决此问题。我建议使用后一种方法,因为用反斜杠转义可能会很难看和不可预测,并且会在几个月后重新阅读此脚本时帮助您指出这是一个正则表达式,而不是字符串。是的。您的问题是什么?请尝试awk“VALUES\(“{print$2}”“
@JorgeCampos它不起作用。看看我的答案。是的。你的问题是什么?试试awk”VALUES\(“{print$2}”
@JorgeCampos它不起作用。看看我的答案。@logan在这种情况下我更喜欢[(]
或者重新考虑FS
例如默认空间,然后检查上一列=”值(”
etc…无论如何,重要的是它对你有帮助。@logan在这种情况下,我更喜欢[(]
或重新考虑FS
例如默认空格,然后检查上一列的==”值(“
等等)。无论如何,重要的是它对你有帮助。