A minha interpretação de 'sed -i.bak' / ^ x / d '“$ SOME_FILE”' está correta?

2

Por alguma razão sed sempre me intimidou, sua sintaxe é um pouco estranha, suponho. Quero ter certeza de que entendi o que o seguinte fará.

sed -i.bak '/^x /d' "$SOME_FILE"
  1. Isso fará primeiro um backup de $SOME_FILE em ${SOME_FILE}.bak ( -i.bak ).
  2. Cada linha em $SOME_FILE que corresponde à expressão regular " ^x " (que significa linhas começando com ' x ' seguido por um espaço) será excluída.
por Captain Man 06.05.2016 / 17:03

2 respostas

3

Sim, sua compreensão está correta. No seu formato, presumo que você esteja usando o GNU sed (outras implementações podem precisar de um espaço entre o -i e o .bak , e algumas podem não suportar -i ). Seu -i funciona da seguinte maneira (de info sed ):

-i[SUFFIX]
--in-place[=SUFFIX]
     This option specifies that files are to be edited in-place.  GNU
     'sed' does this by creating a temporary file and sending output to
     this file rather than to the standard output.(1).

 This option implies '-s'.

 When the end of the file is reached, the temporary file is renamed
 to the output file's original name.  The extension, if supplied,
 is used to modify the name of the old file before renaming the
 temporary file, thereby making a backup copy(2)).

 This rule is followed: if the extension doesn't contain a '*',
 then it is appended to the end of the current filename as a
 suffix; if the extension does contain one or more '*' characters,
 then _each_ asterisk is replaced with the current filename.  This
 allows you to add a prefix to the backup file, instead of (or in
 addition to) a suffix, or even to place backup copies of the
 original files into another directory (provided the directory
 already exists).

 If no extension is supplied, the original file is overwritten
 without making a backup.

O comando d exclui qualquer linha na qual a expressão anterior foi bem-sucedida. Estritamente falando , ele exclui o "espaço de padrão", mas em scripts simples de sed essa é a linha.

    
por 06.05.2016 / 17:37
-2

'/^x /d' O espaço real não é necessário aqui. Melhor seria '/^x\s\d' , que representa o começo da string, começando com x , espaço em branco e, em seguida, um dígito.

    
por 06.05.2016 / 17:25

Tags