2017-07-19 87 views
0

我有正則表達式模式來查找和逗號之間的逗號替換。它完美的工作在崇高的文本,但不是在sed linux命令。不知道這裏缺少什麼。RegEx模式發現在崇高的文本,但不是在Linux sed命令sed

註冊防爆模式:,(?!(?:[^"]*"[^"]*")*[^"]*$)

sed命令 sed -e 's/,\(?!\(?:[^"]*"[^"]*"\)*[^"]*$\)/\1\2/g' test.csv

+1

不同的工具實現了所有可能的正則表達式特徵的不同子集。 'sed'支持相當有限的一組功能。 – janos

+0

'sed'只支持「[基本正則表達式](http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap09.html#tag_09_03)」,零寬度斷言如'(?!)'是不支持。 – ephemient

+0

是否有使用複雜的正則表達式模式來查找和替換文件內容 –

回答

0

你沒有提供任何樣品的輸入/輸出,所以它是一個猜測,但是這是你想要做什麼:

$ echo '"a,b","c,d"' | sed 's/"\([^"]*\),\([^"]*\)"/\1\2/g' 
ab,cd 

鑑於你的評論如下:

$ echo '"a,b","c,d"' | sed 's/\("[^"]*\),\([^"]*"\)/\1\2/g' 
"ab","cd" 
+0

我試圖只替換逗號不引號。我使用'perl -pi -e's /,(?!(?:[^ \「] * \」[^ \「] * \」)* [^ \「] * $)/ ,/g'' –

+0

然後,只需在捕獲組中包含引號,我更新了我的答案,您確實做得比實際情況複雜得多,我發佈的內容將適用於任何具有任意sed的UNIX框。 –