如何只輸出 Regex 有修改的地方?

要用 Regex 來處理文件,條件已經寫好,但不想輸出不符合的部分
例如:

function_1(A, B, C);
D = A + B;
C = 1;
function_2(num, array);
num = 1;

Regex: sed s/(\(.*\))/\1/g
不符合的地方卻還是在,會給出以下內容

function_1A, B, C;
D = A + B;
C = 1;
function_2num, array;
num = 1;

但想要的結果是

A, B, C
num, array

有沒有甚麼方法能夠只輸出有符合並更改後的結果呢?

這樣?
/[ABC,]|num|array*/gm

1個讚

可以先用 grep 將有符合條件的留下來
再用 sed 處理,但要記得將前後的也要納入並將之取代成空白

sed -E 's/條件/取代/g'`
->
grep -E '條件'
sed -E 's/.*條件.*/取代/g'

另外你的 regex 是不是有錯?
s/(\(.*\))/\1/g 不會把括號取代掉,s/\((.*)\)/\1/g 這個才會

以例子來說
grep -E '\(.*\)'
這樣就會只剩下

function_1(A, B, C);
function_2(num, array);

然後再使用 sed 但要修改一下原來的
sed -E 's/.*\((.*)\).*/\1/g 利用 .* 將前後取代成空白
最後就變成

A, B, C
num, array
1個讚

@jack 謝謝回覆,但這樣會保留那些不在括號內的
@yhmtsai 謝謝,這樣的確能只留有修改的下來。
關於 regex 錯誤,我用 sed 's/(\(.*\))/\1/g' 的確是會將括號移除,但我沒有用 -E
如果加上 -Esed -E 's/(\(.*\))/\1/g' 就會把括號留著,不知道 -E 差在哪裡?

-E 是指 Extended Regular Expression (ERE)
沒啟用的話就是只有 Basic Regular Expression (BRE)
以下特殊符號就不像一般我們使用 regex 所表示的意義
?, + , {, |, (, ) 這些在沒有 -E 時要多用 \ 才是平常所知的

( [BRE] <-> \( [ERE]
\( [BRE] <-> ( [ERE]

這樣的對應,所以當你沒有使用 -E,原先的確是正確的
但當使用 -E時,就要使用我在回答時所給的那串,基本上就是 (, \( 這些對調