파일:/home/jian/Desktop/pg_sources/main/postgres/src/test/regress/sql/test_setup.sql
246: --
247: -- Create some C functions that will be used by various tests.
248: --
249:
250: CREATE FUNCTION binary_coercible(oid, oid)
251: RETURNS bool
252: AS :'regresslib', 'binary_coercible'
253: LANGUAGE C STRICT STABLE PARALLEL SAFE;
254:
255: CREATE FUNCTION ttdummy ()
256: RETURNS trigger
257: AS :'regresslib'
258: LANGUAGE C;
259:
260: CREATE FUNCTION get_columns_length(oid[])
261: RETURNS int
262: AS :'regresslib'
263: LANGUAGE C STRICT STABLE PARALLEL SAFE;
나는 이것이 결코 변하지 않을 것이라고 생각합니다.
현재 내가 사용하고 있는
sed -i '250,263 s/^/--/' /home/jian/Desktop/pg_sources/main/postgres/src/test/regress/sql/test_setup.sql
ss 함수를 주석 처리하지만 이는 안전하지 않습니다. 새 줄을 앞에 쉽게 추가할 수 있습니다.
그래서 저는 이 줄을 주석 처리하는 방법을 찾으려고 노력하고 있습니다.
패턴은 다음과 같습니다.
"C function" 패턴으로 시작하는 행을
주석 처리합니다. "LANGUAGE C" 패턴을 사용하여 마지막 행으로 끝나는 한 줄씩 반복합니다.
답변1
awk를 사용하십시오.
$ awk '
/C functions/ { beg=NR }
/LANGUAGE C/ { end=NR }
beg { a[NR]=$0; next }
{ print }
END {
for ( i=beg; i<=NR; i++ ) {
print ( (i>end) || (a[i] ~ /^--/) ? "" : "--" ) a[i]
}
}
' test_setup.sql
--
-- Create some C functions that will be used by various tests.
--
--
--CREATE FUNCTION binary_coercible(oid, oid)
-- RETURNS bool
-- AS :'regresslib', 'binary_coercible'
-- LANGUAGE C STRICT STABLE PARALLEL SAFE;
--
--CREATE FUNCTION ttdummy ()
-- RETURNS trigger
-- AS :'regresslib'
-- LANGUAGE C;
--
--CREATE FUNCTION get_columns_length(oid[])
-- RETURNS int
-- AS :'regresslib'
-- LANGUAGE C STRICT STABLE PARALLEL SAFE;
답변2
마지막 닫는 태그를 찾는 것은 일반적으로 입력을 반전시킨 다음 범위를 검색하여 얻을 수 있습니다 /end-match/,/start-match/
. 이렇게 하면 end-match
그 사이의 다른 모든 패턴이 포함됩니다.
예를 들어
tac test_setup.sql |
sed '/LANGUAGE C/,/C function/s/^/--/;s/^----/--/' |
tac
또는awk
tac test_setup.sql |
awk '/LANGUAGE C/,/C function/{ if ($0!~/^--/) {sub(/^/,"--",$0)}}1' |
tac
또는 @EdMorton이 제안한 것처럼 더 간단합니다.
tac test_setup.sql |
awk '/LANGUAGE C/,/C function/{sub(/^(--)?/,"--")}1' |
tac
답변3
사용행복하다(이전 Perl_6)
~$ raku -ne 'if /^CREATE \s FUNCTION /fff/^ \s+ LANGUAGE/ { put "-- " ~ $_ } else { put $_ };' file
이 Raku 답변은 각 CREATE FUNCTION
단락에 개별적으로 주석을 달았습니다. Raku의 /…/fff/…/
"트리거" 연산자를 사용합니다.
입력 예:
CREATE FUNCTION binary_coercible(oid, oid)
RETURNS bool
AS :'regresslib', 'binary_coercible'
LANGUAGE C STRICT STABLE PARALLEL SAFE;
CREATE FUNCTION ttdummy ()
RETURNS trigger
AS :'regresslib'
LANGUAGE C;
CREATE FUNCTION get_columns_length(oid[])
RETURNS int
AS :'regresslib'
LANGUAGE C STRICT STABLE PARALLEL SAFE;
예제 출력:
-- CREATE FUNCTION binary_coercible(oid, oid)
-- RETURNS bool
-- AS :'regresslib', 'binary_coercible'
-- LANGUAGE C STRICT STABLE PARALLEL SAFE;
-- CREATE FUNCTION ttdummy ()
-- RETURNS trigger
-- AS :'regresslib'
-- LANGUAGE C;
-- CREATE FUNCTION get_columns_length(oid[])
-- RETURNS int
-- AS :'regresslib'
-- LANGUAGE C STRICT STABLE PARALLEL SAFE;
https://docs.raku.org/routine/fff
https://docs.raku.org/언어/5to6-nutshell#if_elsif_else_unless
https://raku.org