如果方括号内的内容不包含空格,则去除方括号
Remove square brackets if content within the square bracket does not contain spaces
我有一个要求,我需要将 sql 从一种格式转换为另一种格式。
下面是示例
select [Project_ID] AS [Project ID]
将以上行转换为:
select Project_ID AS "Project ID"
所以我的想法是2步策略
- 如果我能以某种方式删除中间没有空格的 1 的 []。可能是通过 Regex
- 将 [ 和 ] 替换为 " 其余的 1s。
我有超过 10K 行代码需要更改。手动工作会花费我很多时间来完成这件事。
这是两个正则表达式替换的简单任务。
先把\[([^\[\] \r\n]+)\]
换成</code>。这将从非 space 字符串中删除括号。</p>
<p>接下来将 <code>\[([^\[\] \r\n]+ [^\[\]\r\n]+)\]
替换为 ""
。这将用 spaces.
替换字符串上的双引号括号
请注意,两个替换项都包括 \[\]
和 \r\n
。将替换限制为本身不包含括号的字符串和不包含换行符的字符串。
在进行此类编辑之前,请备份您的文件。因为上面做了两个单独的替换,所以有嵌套括号的行可能会被错误地对待。
如果所有代码行的格式都与 select [Project_ID] AS [Project ID]
相同,那么您可以按以下顺序执行此操作:
1:将] as [
替换为AS "
-- (Space AS ")
2:将[
替换为</code> -- (Space)</p>
<p>3:将<code>]
替换为"
编辑:
如果数据是混合格式:
select [Project_ID] AS [Project ID]
也许
select [Project_ID] [Project ID]
那么您可以按以下顺序进行:
1:将] as [
替换为AS "
-- (Space AS ")
2:将] [
替换为"
-- (Space ")
3:将[
替换为</code> -- (Space)</p>
<p>4:将<code>]
替换为"
您可以使用两个正则表达式来获得所需的格式。
按照以下步骤操作:
- 备份你的主文件。在另一个临时文件中执行此操作。
- 在搜索模式下执行 Ctrl + H 和 select "Regular expressions"
- 在"find what"框中写入:(?i)(?<=select)\s+[|]\s+(?=as)
- 然后点击全部替换。
- 在"find what"框内填写:[([^[]]+)]
- 输入"replace box"并点击全部替换:“\1”
不是最有效的方法。但是 OP 可以 awk
awk -F'[' '{gsub(/\]/ , "", ); gsub(/\]/ ,"" ,); ="2""2"; print}' ;
演示:
$echo "select [Project_ID] AS [Project ID]" | awk -F'[' '{gsub(/\]/ , "", ); gsub(/\]/ ,"" ,); ="2""2"; print}' ;
select Project_ID AS "Project ID"
$
解释:
awk -F'[' -- Set delimiter as "["
gsub(/\]/ , "", ); -- Replace ] with "" in second field. We pass regular expression between / / and \ - is escape character
gsub(/\]/ ,"" ,) -- Remove ] from third field.
="2""2" -- Concat double quotes at start and end of 3rd field.
您可以一步完成两个替换:
- Ctrl+H
- 查找内容:
\[(\w+)\]|\[([^\]]+)\]
- 替换为:
(?1:(?2""))
- 检查 环绕
- 检查 正则表达式
- 全部替换
解释:
\[ # opening square bracket
(\w+) # group 1, 1 or more word character
\] # closing square bracket
| # OR
\[ # opening square bracket
([^\]]+) # group 2, 1 or more any character that is not a closing bracket
\] # closing square bracket
替换:
(?1 # if group 1 exists:
# replace with content of group 1
: # else
(?2 # if group 2 exists:
"" # replace with content of group 2 suround with quotes
) # endif group 2
) # endif group 1
截图(之前):
截图(后):
我有一个要求,我需要将 sql 从一种格式转换为另一种格式。
下面是示例
select [Project_ID] AS [Project ID]
将以上行转换为:
select Project_ID AS "Project ID"
所以我的想法是2步策略
- 如果我能以某种方式删除中间没有空格的 1 的 []。可能是通过 Regex
- 将 [ 和 ] 替换为 " 其余的 1s。
我有超过 10K 行代码需要更改。手动工作会花费我很多时间来完成这件事。
这是两个正则表达式替换的简单任务。
先把\[([^\[\] \r\n]+)\]
换成</code>。这将从非 space 字符串中删除括号。</p>
<p>接下来将 <code>\[([^\[\] \r\n]+ [^\[\]\r\n]+)\]
替换为 ""
。这将用 spaces.
请注意,两个替换项都包括 \[\]
和 \r\n
。将替换限制为本身不包含括号的字符串和不包含换行符的字符串。
在进行此类编辑之前,请备份您的文件。因为上面做了两个单独的替换,所以有嵌套括号的行可能会被错误地对待。
如果所有代码行的格式都与 select [Project_ID] AS [Project ID]
相同,那么您可以按以下顺序执行此操作:
1:将] as [
替换为AS "
-- (Space AS ")
2:将[
替换为</code> -- (Space)</p>
<p>3:将<code>]
替换为"
编辑:
如果数据是混合格式:
select [Project_ID] AS [Project ID]
也许
select [Project_ID] [Project ID]
那么您可以按以下顺序进行:
1:将] as [
替换为AS "
-- (Space AS ")
2:将] [
替换为"
-- (Space ")
3:将[
替换为</code> -- (Space)</p>
<p>4:将<code>]
替换为"
您可以使用两个正则表达式来获得所需的格式。
按照以下步骤操作:
- 备份你的主文件。在另一个临时文件中执行此操作。
- 在搜索模式下执行 Ctrl + H 和 select "Regular expressions"
- 在"find what"框中写入:(?i)(?<=select)\s+[|]\s+(?=as)
- 然后点击全部替换。
- 在"find what"框内填写:[([^[]]+)]
- 输入"replace box"并点击全部替换:“\1”
不是最有效的方法。但是 OP 可以 awk
awk -F'[' '{gsub(/\]/ , "", ); gsub(/\]/ ,"" ,); ="2""2"; print}' ;
演示:
$echo "select [Project_ID] AS [Project ID]" | awk -F'[' '{gsub(/\]/ , "", ); gsub(/\]/ ,"" ,); ="2""2"; print}' ;
select Project_ID AS "Project ID"
$
解释:
awk -F'[' -- Set delimiter as "["
gsub(/\]/ , "", ); -- Replace ] with "" in second field. We pass regular expression between / / and \ - is escape character
gsub(/\]/ ,"" ,) -- Remove ] from third field.
="2""2" -- Concat double quotes at start and end of 3rd field.
您可以一步完成两个替换:
- Ctrl+H
- 查找内容:
\[(\w+)\]|\[([^\]]+)\]
- 替换为:
(?1:(?2""))
- 检查 环绕
- 检查 正则表达式
- 全部替换
解释:
\[ # opening square bracket
(\w+) # group 1, 1 or more word character
\] # closing square bracket
| # OR
\[ # opening square bracket
([^\]]+) # group 2, 1 or more any character that is not a closing bracket
\] # closing square bracket
替换:
(?1 # if group 1 exists:
# replace with content of group 1
: # else
(?2 # if group 2 exists:
"" # replace with content of group 2 suround with quotes
) # endif group 2
) # endif group 1
截图(之前):
截图(后):