Kar*_*ten 6 regex unix csv double-quotes
我有几乎以下问题,但没有找到解决方案.这可能是我的CSV文件结构:
1223;"B630521 ("L" fixed bracket)";"2" width";"length: 5"";2;alternate A
1224;"B630522 ("L" fixed bracket)";"3" width";"length: 6"";2;alternate B
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,有一些"
是针对英寸和"L"
封闭的"
.
现在我正在寻找一个UNIX shell脚本用2个单引号替换"
(英寸)和"L"
双引号,如下例所示:
sed "s/$OLD/$NEW/g" $QFILE > $TFILE && mv $TFILE $QFILE
Run Code Online (Sandbox Code Playgroud)
谁能帮我?
也许这就是你想要的:
sed "s/\([0-9]\)\"\([^;]\)/\1''\2/g"
Run Code Online (Sandbox Code Playgroud)
即:找到"
数字 ( ) 后面[0-9]
但后面没有分号 ( ) 的双引号 ( [^;]
),并将其替换为两个单引号。
编辑: 我可以扩展我的命令(现在变得很长):
sed "s/\([0-9]\)\"\([^;]\)/\1''\2/g;s/\([^;]\)\"\([^;]\)/\1\'\2/g;s/\([^;]\)\"\([^;]\)/\1\'\2/g"
Run Code Online (Sandbox Code Playgroud)
由于您使用的是 SunOS,我猜您不能使用扩展正则表达式 ( sed -r
)?因此我这样做了:第一个s
命令将所有英寸替换"
为''
,第二个和第三个命令s
相同。他们将所有"
不是 a 直接邻居的内容替换;
为单个'
。我必须执行两次才能替换第二个"
eg "L"
,因为两者之间只有一个字符"
,并且该字符已经与 匹配\([^;]\)
。这样您也可以替换""
为''
. 如果你有"""
或""""
等等,你必须再放一个(但只能再放一个)s
。
归档时间: |
|
查看次数: |
944 次 |
最近记录: |