我需要在这里分两步做事:
我需要2个正则表达式,因为有些表名不以xx_
为前缀。
我在微软计算机上。
我可以访问Unix,但我使用的是GIT bash实用程序,似乎安装了sed和perl,以防更容易?
更新
示例输入:
CREATE TABLE [dbo]。[xx_attribute]( [attributeID] [int] NOT NULL, [dateTypeID] [tinyint] NOT NULL,
应输出为:
CREATE TABLE [dbo]。[Attribute]( [AttributeID] [int] NOT NULL, [DateTypeID] [tinyint] NOT NULL
注意:值[int]和[tinyint]将成为[Int]和[Tinyint],这不是什么大事。
答案 0 :(得分:4)
perl -pe "s/\[(xx_)?(\w+)\]/'[' . ($1 ? $2 : ucfirst $2) . ']'/ge"
这里使用双引号,因为我的理解是OP在Windows命令行上。
答案 1 :(得分:3)
Perl:
#!/usr/bin/perl
while (<>) {
s/\[(?:xx_)?([^]]+)\]/\[\u$1\]/g;
print;
}
当然,您可以从命令行执行此操作:
perl -pe 's/\[(?:xx_)?([^]]+)\]/\[\u$1\]/g'
这是用你的例子测试的。
CREATE TABLE [dbo].[xx_SomeAttribute]( [someAttributeID] [int] NOT NULL, [dateTypeID] [tinyint] NOT NULL
CREATE TABLE [Dbo].[SomeAttribute]( [SomeAttributeID] [Int] NOT NULL, [DateTypeID] [Tinyint] NOT NULL
请注意括号内的所有文字会受到影响。
答案 2 :(得分:0)
对于第一部分,您可以这样做:
sed 's/xx_\(\w\+\)/\1/' filename
第二部分:
sed 's/\w\+/\u\0/' filename
答案 3 :(得分:0)
Awk让这一步变得简单:
awk '{sub("^xx_", ""); print toupper(substr($0, 1, 1)) substr($0, 2);}'
将您的物品放在一行上。 sub()取消了前缀,然后print语句以大写形式打印第一个剩余字符,其余字符按原样打印。
答案 4 :(得分:0)
这可以使用GNU sed 4.2.1
sed 's/\[xx_/[/g; s/\[./\U&/g'
答案 5 :(得分:0)
仅使用shell
#!/bin/bash
declare -a arr
while read -r -a arr
do
for((i=0;i<=${#arr};i++))
do
case "${arr[i]}" in
*"[xx_"* );;&
*"["*)
arr[i]=${arr[i]//xx_/}
arr[i]=${arr[i]^^${arr[i]:1:1}}
esac
done
echo ${arr[@]}
done < "file"