Предполагая, когда вы говорите replace
, вы имеете в виду remove
:
$ cat file
I'm looking to replace a large code block from a file in bash, specifically
case $host_os in
darwin*)
saved_LDFLAGS="$LDFLAGS"
LDFLAGS="$LDFLAGS -Wl,-no_weak_imports"
AC_TRY_LINK([],[],
[
LD_MAY_BE_WEAK=no
],
[
LD_MAY_BE_WEAK=yes
LDFLAGS="$saved_LDFLAGS"
]);;
*)
LD_MAY_BE_WEAK=no;;
esac
other
case $host_os in
esac
.
$ cat badstuff
case $host_os in
darwin*)
saved_LDFLAGS="$LDFLAGS"
LDFLAGS="$LDFLAGS -Wl,-no_weak_imports"
AC_TRY_LINK([],[],
[
LD_MAY_BE_WEAK=no
],
[
LD_MAY_BE_WEAK=yes
LDFLAGS="$saved_LDFLAGS"
]);;
*)
LD_MAY_BE_WEAK=no;;
esac
.
$ cat tst.awk
NR==FNR {
gsub(/^[[:blank:]]+|[[:blank:]]+$/,"")
gsub(/[^^[:blank:]]/,"[&]")
gsub(/\^/,"\\&")
gsub(/[[:blank:]]+/,"[[:blank:]]+")
bad = (FNR>1 ? bad ORS : "") "[[:blank:]]*" $0 "[[:blank:]]*"
next
}
{ rec = (FNR>1 ? rec ORS : "") $0 }
END {
sub(bad,"",rec)
print rec
}
.
$ awk -f tst.awk badstuff file
I'm looking to replace a large code block from a file in bash, specifically
other
case $host_os in
esac
Приведенное выше создает регулярное выражение из многострочной строки, которую вы хотите удалить, заменив все пробелы в каждой строке на [[:blank:]]*
(и поместите это в начало / конец каждой строки), чтобы пробел не Не имеет значения в соответствии, превращая все другие символы в литералы, чтобы они не обрабатывались как мета-символы регулярного выражения, а затем просто удаляя строку, соответствующую этому регулярному выражению, из содержимого основного файла. Если вы добавите этот оператор в блок END
:
print bad | "cat>&2"
, вы увидите на stderr регулярное выражение, которое мы создаем из файла badstuff
:
[[:blank:]]*[c][a][s][e][[:blank:]]+[$][h][o][s][t][_][o][s][[:blank:]]+[i][n][[:blank:]]*
[[:blank:]]*[d][a][r][w][i][n][*][)][[:blank:]]*
[[:blank:]]*[s][a][v][e][d][_][L][D][F][L][A][G][S][=]["][$][L][D][F][L][A][G][S]["][[:blank:]]*
[[:blank:]]*[L][D][F][L][A][G][S][=]["][$][L][D][F][L][A][G][S][[:blank:]]+[-][W][l][,][-][n][o][_][w][e][a][k][_][i][m][p][o][r][t][s]["][[:blank:]]*
[[:blank:]]*[A][C][_][T][R][Y][_][L][I][N][K][(][[][]][,][[][]][,][[:blank:]]*
[[:blank:]]*[[][[:blank:]]*
[[:blank:]]*[L][D][_][M][A][Y][_][B][E][_][W][E][A][K][=][n][o][[:blank:]]*
[[:blank:]]*[]][,][[:blank:]]*
[[:blank:]]*[[][[:blank:]]*
[[:blank:]]*[L][D][_][M][A][Y][_][B][E][_][W][E][A][K][=][y][e][s][[:blank:]]*
[[:blank:]]*[L][D][F][L][A][G][S][=]["][$][s][a][v][e][d][_][L][D][F][L][A][G][S]["][[:blank:]]*
[[:blank:]]*[]][)][;][;][[:blank:]]*
[[:blank:]]*[*][)][[:blank:]]*
[[:blank:]]*[L][D][_][M][A][Y][_][B][E][_][W][E][A][K][=][n][o][;][;][[:blank:]]*
[[:blank:]]*[e][s][a][c][[:blank:]]*