パターンに基づいてファイルの行をコメントアウトします。

パターンに基づいてファイルの行をコメントアウトします。

ファイル:/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行ずつ繰り返します。

ベストアンサー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;

おすすめ記事