sed inline editing falha para várias declarações sed

3

Eu quero acrescentar #SB# no começo de cada linha onde ela corresponde a uma determinada string

incron.sh

sed -i -e'/test1/s/^/#SB#/g' file1
sed -i -e'/test2/s/^/#SB#/g' file1
sed -i -e'/test4/s/^/#SB#/g' file1

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.

    
por stasunny 12.01.2012 / 08:33

3 respostas

2

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.

    
por 12.01.2012 / 08:52
1

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.

    
por 12.01.2012 / 11:42
0

Você pode usar o Vim no modo Ex:

ex -sc 'g/\vtest(1|2|4)/s/^/#SB#/' -cx file1
  1. g regex global

  2. \v ativa a mágica

  3. s substituto

  4. x salvar e fechar

por 17.04.2016 / 08:42

Tags