O argumento -i
para sed é uma extensão do GNU. Provavelmente você não está executando o GNU sed, e é por isso que você está recebendo o erro sobre -i
não ser reconhecido.
Eu quero acrescentar #SB#
no começo de cada linha onde ela corresponde a uma determinada string
sed -i -e'/test1/s/^/#SB#/g' file1
sed -i -e'/test2/s/^/#SB#/g' file1
sed -i -e'/test4/s/^/#SB#/g' file1
/apps/pmserver $ cat file1
00 45 /ser/bat/ab.sh test1
00 45 /ser/bat/ab.sh test2
00 45 /ser/bat/ab.sh test3
00 45 /ser/bat/ab.sh test4
/apps/pmserver $
Estou usando o Korn Shell.
Eu posso produzir para um novo arquivo, mas ele não funciona se eu tiver mais de uma instrução sed
em um script, como mostrado acima. Estou recebendo o erro
sed: Not a recognized flag: i
O que estou tentando fazer é comentar algumas entradas de crontab
pertencentes a uma equipe específica. test1 test2 ... são seus nomes de arquivo e estes precisam ser desativados.
O argumento -i
para sed é uma extensão do GNU. Provavelmente você não está executando o GNU sed, e é por isso que você está recebendo o erro sobre -i
não ser reconhecido.
Seu sed não é GNU (provavelmente), então -i para edição in-loco não é suportada. Você pode evitá-lo usando um arquivo temporário:
sed -i -e'/test1/s/^/#SB#/g' file1
torna-se
sed -e'/test1/s/^/#SB#/g' file1 > temp_file
mv temp_file file1
Claro que você pode fazer melhor usando mktemp como este
tmpfile='mktemp'; sed -e '/test1/s/^/#SB#/g' file1 > $tmpfile; mv $tmpfile file1
Absolutamente para evitar sed e redirecionar sem arquivo temporário, pois o arquivo original ficará truncado.
Você pode usar o Vim no modo Ex:
ex -sc 'g/\vtest(1|2|4)/s/^/#SB#/' -cx file1
g
regex global
\v
ativa a mágica
s
substituto
x
salvar e fechar
Tags sed