Comandos Linux ed e red
Nos sistemas operacionais do tipo Unix, ed é um editor de arquivos interativo.
vermelho , abreviação de “edição restrita”, é uma versão do ed que contém restrições sobre os tipos de edição que podem ser executados.
Descrição
ed é um dos programas de edição mais antigos do mercado. Foi introduzido em 1969 , aproximadamente 50 anos atrás, como um dos componentes originais do Unix .
Sintaxe
ed [ opções ] [ arquivo ]
vermelho [ opções ] [ arquivo ]
Opções
-h , –help | Exiba uma mensagem de ajuda e saia. |
-V , –version | Informações de versão de saída e saída. |
-G , – tradicional | Execute no modo de compatibilidade. |
-l , –loose-exit-status | Saia com um status zero (finalização normal) mesmo se um comando falhar. Essa opção pode ser útil se ed estiver definido como o editor do crontab , por exemplo. |
-p , –prompt = STRING | ed geralmente espera por uma entrada de utilizador a uma linha em branco; essa opção usará a string STRING como o prompt . |
-r , –restricted | Execute no modo restrito. |
-s , –quiet , –silent | Suprimir diagnósticos. |
-v , –verbose | Opere verbalmente . |
Descrição técnica
ed é um editor de texto orientado a linhas com uma interface mínima. É usado para criar, exibir, modificar e manipular arquivos de texto .
Se ed for chamado com um argumento de nome de arquivo , uma cópia do arquivo será lida no buffer do editor . Alterações são feitas nessa cópia e não diretamente no próprio arquivo. Ao sair do ed , quaisquer alterações não salvas explicitamente com um comando ‘ w ‘ são perdidas.
A edição é realizada em dois modos distintos: comando e entrada . Quando invocado pela primeira vez, ed está no modo de comando . Nesse modo, os comandos são lidos a partir da entrada padrão e executados para manipular o conteúdo do buffer do editor. Um comando típico pode se parecer com:
, s / antigo / novo / g
que substitui todas as ocorrências da cadeia antiga pela nova .
Quando um comando de entrada, como ‘ a ‘ (anexar), ‘ i ‘ (inserir) ou ‘ c ‘ (alterar) é fornecido, o item entra no modo de entrada . Este modo é o principal meio de adicionar texto a um arquivo. Nesse modo, nenhum comando está disponível; em vez disso, a entrada padrão é gravada diretamente no buffer do editor. As linhas consistem em texto até e incluindo um caractere de nova linha . O modo de entrada é encerrado inserindo um único período (” . “) Em uma linha.
Uma coisa importante a lembrar é que todos os comandos ed operam em linhas inteiras ou intervalos de linhas. Por exemplo, o comando ‘ d ‘ exclui linhas; o comando ‘ m ‘ move linhas, e assim por diante. É possível modificar apenas uma parte de uma linha por substituição específica, como no exemplo acima; embora, mesmo assim, o comando ‘ s ‘ seja aplicado a linhas inteiras de cada vez.
Em geral, os comandos ed consistem em zero ou mais endereços de linha, seguidos por um comando de caractere único e possivelmente parâmetros adicionais . Os comandos têm a estrutura:
Comando [ endereço [, endereço ]] [ parâmetros ]
Os endereços indicam a linha ou o intervalo de linhas a serem afetadas pelo comando. Se menos endereços forem fornecidos do que o comando aceita, os endereços padrão serão fornecidos.
Endereços de linha
Um endereço representa o número de uma linha no buffer. ed mantém um endereço atual que é fornecido aos comandos como o endereço padrão, se nenhum outro for especificado.
Quando um arquivo é lido pela primeira vez, o endereço atual é definido para a última linha do arquivo. Em geral, a qualquer momento, o endereço atual é definido para a última linha afetada por um comando.
Pense no endereço como um marcador de local para a última linha do arquivo em que ed fez algo e, a menos que seja dito o contrário, a linha em que ele irá operar a seguir.
Referindo-se a endereços de linha
Uma referência a um endereço de linha é construída a partir de uma das bases na lista abaixo, opcionalmente seguida por um deslocamento numérico . O deslocamento pode incluir qualquer combinação de dígitos, operadores (por exemplo, ” + ” e ” – “) e espaço em branco . Os endereços são lidos da esquerda para a direita e seus valores são calculados em relação ao endereço atual.
Uma exceção à regra que endereços representa números de linha é o endereço especial 0 (zero). Este endereço significa “antes da primeira linha” e pode ser usado em qualquer comando.
Intervalos de endereço
Um intervalo de endereços é de dois endereços separados por vírgula (” , “) ou ponto e vírgula (” ; “). O valor do primeiro endereço em um intervalo não pode exceder o valor do segundo. Se apenas um endereço for fornecido em um intervalo, o segundo endereço será definido para o endereço fornecido.
Cada endereço em um intervalo delimitado por vírgulas é interpretado em relação ao endereço atual. Em um intervalo delimitado por ponto e vírgula, o primeiro endereço é usado para definir o endereço atual e o segundo endereço é interpretado em relação ao primeiro.
Os seguintes símbolos de endereço são reconhecidos:
. | A linha atual (endereço) no buffer. |
$ | A última linha no buffer. |
n | O n th linha no tampão, onde n é um número no intervalo de [0, $] . |
– | A linha anterior. Esta opção é equivalente a -1 e pode ser repetida com efeito cumulativo. |
^ n | O n th linha anterior, onde n é um número não-negativo. |
+ | A próxima linha. Esta opção é equivalente a +1 e pode ser repetida com efeito cumulativo. |
+ n | O n th próxima linha, onde n é um número não-negativo. |
, | As linhas da primeira à última no buffer. Esta opção é equivalente ao intervalo de endereços 1, $ . |
; | The current through last lines in the buffer. This option is equivalent to the address range .,$. |
/re/ | The next line containing the regular expression re. The search wraps to the beginning of the buffer and continues down to the current line, if necessary. // repeats the last search. |
?re? | The previous line containing the regular expression re. The search wraps to the end of the buffer and continues up to the current line, if necessary. ?? repeats the last search. |
‘lc | A linha previamente marcada por um comando ‘ k ‘ (marca), em que lc é uma letra minúscula . |
Expressões regulares
Expressões regulares são padrões usados na seleção de texto. Por exemplo, o comando ed
g / string /
imprime todas as linhas que contêm string . Expressões regulares também são usadas pelo comando ‘ s ‘ para selecionar texto antigo a ser substituído por novo. Além de especificar literais de string, expressões regulares podem representar classes de strings. Se for possível para uma expressão regular corresponder a várias seqüências de caracteres em uma linha, a correspondência mais longa à esquerda é a selecionada.
Os seguintes símbolos são usados na construção de expressões regulares:
c | Qualquer caractere c não listado abaixo, incluindo ‘ { ‘, ‘ } ‘, ‘ ( ‘, ‘ ) ‘, ‘ < ‘ e ‘ > ‘, corresponde a si mesmo. |
\ c | Um carácter escapou-barra invertida c diferente de ‘ { ‘, ‘ } ‘, ‘ ( ‘, ‘ ) ‘, ‘ < ‘, ‘ > ‘, ‘ b ‘, ‘ B ‘, ‘ w ‘, ‘ W ‘, ‘ + ‘e’ ? ‘corresponde a si próprio. |
. | Corresponde a qualquer caractere único. |
[ classe char ] | Corresponde a qualquer caractere único na classe char . Para incluir um ‘ ] ‘ na classe char , ele deve ser o primeiro caractere. Um intervalo de caracteres pode ser especificado separando os caracteres finais do intervalo com um ‘ – ‘; por exemplo, ‘ az ‘ especifica os caracteres minúsculos. As seguintes expressões literais também podem ser usadas na classe char para especificar conjuntos de caracteres:
[: alnum:] [: cntrl:] [:mais baixo:] [:espaço:] [:alfa:] [: dígito:] [:impressão:] [:superior:] [:em branco:] [:gráfico:] [: punct:] [: xdigit:] Se ‘ – ‘ aparecer como o primeiro ou o último caractere da classe char , ele corresponderá a si próprio. Todos os outros caracteres da classe char se combinam. Padrões na classe char do formulário: [.col-elm.] ou, [= col-elm =] em que col-elm é um elemento de intercalação interpretado de acordo com a localidade do sistema. |
[^ char-class ] | Corresponde a qualquer caractere único, exceto nova linha, que não seja da classe char . char-class é definido como acima. |
^ | Se ‘ ^ ‘ é o primeiro caractere de uma expressão regular, ele ancora a expressão regular no início de uma linha. Caso contrário, ele corresponde a si mesmo. |
$ | Se ‘ $ ‘ for o último caractere de uma expressão regular, ele ancora a expressão regular no final de uma linha. Caso contrário, ele corresponde a si mesmo. |
\ ( re \) | Define uma subexpressão (possivelmente nula ) re . Subexpressões podem ser aninhadas . Uma referência anterior subsequente da forma ‘ \ n ‘, em que n é um número no intervalo [1,9] , expande-se para o texto correspondente ao n ° subexpressão. Por exemplo, a expressão regular ‘ \ (ac \) \ 1 ‘ corresponde à sequência ‘ abcabc ‘, mas não ‘ abcadc ‘. Subexpressões são ordenadas em relação ao seu delimitador esquerdo . |
* | Corresponde à expressão regular ou subexpressão de um caractere imediatamente antes dela zero ou mais vezes. Se ‘ * ‘ for o primeiro caractere de uma expressão regular ou subexpressão, ele corresponderá a si próprio. O operador ‘ * ‘ às vezes produz resultados inesperados. Por exemplo, a expressão regular ‘ b * ‘ corresponde ao início da string ‘ abbb ‘, em oposição à substring ‘ bbb ‘, pois uma correspondência nula é a única correspondência mais à esquerda. |
\ { n , m \}
\ { n , \ } \ { n \} |
Corresponde à expressão regular ou subexpressão de um caractere imediatamente anterior a ela pelo menos n e no máximo m vezes. Se m for omitido, ele corresponderá pelo menos n vezes. Se a vírgula também for omitida, ela corresponderá exatamente n vezes. Se qualquer uma dessas formas ocorrer primeiro em uma expressão regular ou subexpressão, ela será interpretada literalmente (por exemplo, a expressão regular ‘ \ {2 \} ‘ corresponde à string ‘ {2} ‘ e assim por diante). |
\ <
\> |
Ancora a expressão regular ou a subexpressão de um caractere imediatamente após o início ( \ < ) ou o final ( \ < ) de uma palavra, ou seja, em ASCII , uma sequência máxima de caracteres alfanuméricos, incluindo o sublinhado (” _ “). |
Os seguintes operadores estendidos são precedidos por uma barra invertida ( \ ) para distingui-los da sintaxe ed tradicional .
\ ‘
\’ |
Corresponde incondicionalmente ao início ( \ ‘ ) ou final ( \’ ) de uma linha. |
\? | Optionally matches the single character regular expression or subexpression immediately preceding it. For example, the regular expression ‘a[bd]\?c‘ matches the strings ‘abc‘, ‘adc‘ and ‘ac‘. If \? occurs at the beginning of a regular expressions or subexpression, then it matches a literal ‘?‘. |
\+ | Matches the single character regular expression or subexpression immediately preceding it one or more times. So the regular expression ‘a\+‘ is shorthand for ‘aa*‘. If \+ occurs at the beginning of a regular expression or subexpression, then it matches a literal ‘+‘. |
\b | Matches the beginning or ending (null string) of a word. Thus the regular expression ‘\bhello\b‘ is equivalent to ‘\<hello\>‘. However, ‘\b\b‘ is a valid regular expression whereas ‘\<\>‘ is not. |
\B | Matches (a null string) inside a word. |
\w | Matches any character in a word. |
\W | Matches any character not in a word. |
Commands
All ed commands are single characters, though some require additional parameters. If a command’s parameters extend over several lines, then each line except for the last must be terminated with a backslash (\).
In general, at most one command is allowed per line. However, most commands accept a print suffix, which is any of ‘p‘ (print), ‘l‘ (list) , or ‘n‘ (enumerate), to print the last line affected by the command.
An interrupt (typically ^C) has the effect of aborting the current command and returning the editor to command mode.
ed recognizes the following commands. The commands are shown together with the default address or address range supplied if none is specified (in brackets).
[.,.]a | Appends text to the buffer after the addressed line, which may be the address 0 (zero). Text is entered in input mode. The current address is set to last line entered. |
[.,.]c | Changes lines in the buffer. The addressed lines are deleted from the buffer, and text is appended in their place. Text is entered in input mode. The current address is set to last line entered. |
[.,.]d | Deletes the addressed lines from the buffer. If there is a line after the deleted range, then the current address is set to this line. Otherwise, the current address is set to the line before the deleted range. |
[.,.]e file | Edits file, and sets the default file name. If file is not specified, then the default file name is used. Any lines in the buffer are deleted before the new file is read. The current address is set to the last line read. |
e !command | Edits the standard output of ‘!command‘, (see !command below). The default file name is unchanged. Any lines in the buffer are deleted before the output of command is read. The current address is set to the last line read. |
E file | Edits file unconditionally. This option is similar to the e command, except that unwritten changes are discarded without warning. The current address is set to the last line read. |
f file | Sets the default file name to file. If file is not specified, then the default unescaped file name is printed. |
[1,$]g/re/command-list | Applies command-list to each of the addressed lines matching a regular expression re. The current address is set to the line currently matched before command-list is executed. At the end of the ‘g‘ command, the current address is set to the last line affected by command-list.
Each command in command-list must be on a separate line, and every line except for the last must be terminated by a backslash (\). Any commands are allowed, except for ‘g‘, ‘G‘, ‘v‘, and ‘V‘. A newline alone in command-list is equivalent to a ‘p‘ command. |
[1,$]G/re/ | Interactively edits the addressed lines matching a regular expression re. For each matching line, the line is printed, the current address is set, and the user is prompted to enter a command-list. At the end of the ‘G‘ command, the current address is set to the last line affected by (the last) command-list.
The format of command-list is the same as that of the ‘g‘ command. A newline alone acts as a null command list. A single ‘&‘ repeats the last non-null command list. |
H | Toggles the printing of error explanations. By default, explanations are not printed. It is recommended that ed scripts begin with this command to aid in debugging. |
h | Prints an explanation of the last error. |
[.]i | Inserts text in the buffer before the current line. Text is entered in input mode. The current address is set to the last line entered. |
[.,.+1]j | Joins the addressed lines. The addressed lines are deleted from the buffer and replaced by a single line containing their joined text. The current address is set to the resultant line. |
[.]kc | Marks a line with a lower case letter c. The line can then be addressed as ‘c (a single quote followed by c ) in subsequent commands. The mark is not cleared until the line is deleted or otherwise modified. |
[.,.]l | Prints the addressed lines unambiguously. If invoked from a terminal, ed pauses at the end of each page until a newline is entered. The current address is set to the last line printed. |
[.,.]m[.] | Moves lines in the buffer. The addressed lines are moved to after the right destination address, which may be the address 0 (zero). The current address is set to the last line moved. |
[.,.]n | Prints the addressed lines along with their line numbers. The current address is set to the last line printed. |
[.,.]p | Prints the addressed lines. If invoked from a terminal, ed pauses at the end of each page until a newline is entered. The current address is set to the last line printed. |
P | Toggles the command prompt on and off. Unless a prompt was specified by with command-line option -p string, the command prompt is by default turned off. |
q | Quits ed. |
Q | Quits ed unconditionally. This option is similar to the q command, except that unwritten changes are discarded without warning. |
[$]r file | Reads file to after the addressed line. If file is not specified, then the default file name is used. If there was no default file name prior to the command, then the default file name is set to file. Otherwise, the default file name is unchanged. The current address is set to the last line read. |
[$]r !command | Reads to after the addressed line the standard output of ‘!command‘, (see the !command below). The default file name is unchanged. The current address is set to the last line read. |
[.,.]s/re/replacement/
[.,.]s/re/replacement/g [.,.]s/re/replacement/n |
Replaces text in the addressed lines matching a regular expression re with replacement. By default, only the first match in each line is replaced. If the ‘g‘ (global) suffix is given, then every match to be replaced. The ‘n‘ suffix, where n is a positive number, causes only the nth match to be replaced. It is an error if no substitutions are performed on any of the addressed lines. The current address is set the last line affected.
The re and replacement may be delimited by any character other than space and newline (see the ‘s‘ command below). If one or two of the last delimiters is omitted, then the last line affected is printed as though the print suffix ‘p‘ were specified. An unescaped ‘&‘ in replacement is replaced by the currently matched text. The character sequence ‘\m‘, where m is a number in the range [1,9], is replaced by the mth backreference expression of the matched text. If replacement consists of a single ‘%‘, then replacement from the last substitution is used. Newlines may be embedded in replacement if they are escaped with a backslash (\). |
[.,.]s | Repeats the last substitution. This form of the ‘s‘ command accepts a count suffix ‘n‘, or any combination of the characters ‘r‘, ‘g‘, and ‘p‘. If a count suffix ‘n‘ is given, then only the nth match is replaced. The ‘r‘ suffix causes the regular expression of the last search to be used instead of the that of the last substitution. The ‘g‘ suffix toggles the global suffix of the last substitution. The ‘p‘ suffix toggles the print suffix of the last substitution. The current address is set to the last line affected. |
[.,.]t[.] | Copies the addressed lines to after the right destination address, which may be the address 0 (zero). The current address is set to the last line copied. |
u | Undoes the last command and restores the current address to what it was before the command. The global commands ‘g‘, ‘G‘, ‘v‘, and ‘V‘. are treated as a single command by undo. ‘u‘ is its own inverse. |
[1,$]v/re/command-list | Applies command-list to each of the addressed lines not matching a regular expression re. This option is similar to the ‘g‘ command. |
[1,$]V/re/ | Interactively edits the addressed lines not matching a regular expression re. This option is similar to the ‘G‘ command. |
[1,$]w file | Writes the addressed lines to file. Any previous contents of file is lost without warning. If there is no default file name, then the default file name is set to file, otherwise it is unchanged. If no file name is specified, then the default file name is used. The current address is unchanged. |
[1,$]wq file | Writes the addressed lines to file, and then executes a ‘q‘ command. |
[1,$]w !command | Writes the addressed lines to the standard input of ‘!command‘, (see the !command below). The default file name and current address are unchanged. |
[1,$]W file | Appends the addressed lines to the end of file. This option is similar to the ‘w‘ command, expect that the previous contents of file is not clobbered. The current address is unchanged. |
[.]x | Copies (puts) the contents of the cut buffer to after the addressed line. The current address is set to the last line copied. |
[.,.]y | Copies (yanks) the addressed lines to the cut buffer. The cut buffer is overwritten by subsequent ‘y‘, ‘s‘, ‘j‘, ‘d‘, or ‘c‘ commands. The current address is unchanged. |
[.+1]zn | Scrolls n lines at a time starting at addressed line. If n is not specified, then the current window size is used. The current address is set to the last line printed. |
!command | Executes command via sh. If the first character of command is ‘!‘, then it is replaced by text of the previous ‘!command‘. ed does not process command for backslash (\) escapes. However, an unescaped ‘%‘ is replaced by the default file name. When the shell returns from execution, a ‘!‘ is printed to the standard output. The current line is unchanged. |
[.,.]# | Begins a comment; the rest of the line, up to a newline, is ignored. If a line address followed by a semicolon is given, then the current address is set to that address. Otherwise, the current address is unchanged. |
[$]= | Prints the line number of the addressed line. |
[.+1] | Prints the addressed line, and sets the current address to that line. |
Restricted ed
red operates just like ed, except that it can only edit files in the current directory, and it cannot execute shell commands.
Examples
Getting started
The simplest way to start ed is just to run it with no options at the command line:
ed
This command places your cursor at a new line, but you won’t receive any other prompt or indication that you’re in ed. To quit ed and return to your shell’s command prompt, type q and press enter:
q
You could also have quit using a capital Q, which is an “unconditional” quit: it will exit regardless if you have changes that haven’t yet been written to a file.
Let’s go back into ed:
ed
Now let’s intentionally type a command that ed won’t recognize, to cause an error. There is no o command, so let’s type that:
o
?
The “?” means that something went wrong. By default, ed has such a minimal interface that it doesn’t give you a specific error message. If an error has occurred, you can find out what happened by using the h command:
h
Unknown command
And then ed is ready for another command.
To turn on error messages so they always display immediately by default, use the H command:
H
Making ed more friendly
It’s easier to use ed if you have a command prompt. Let’s quit ed…
q
…which returns us to our shell’s command prompt. Now let’s start ed again using the -p option, which tells ed to use a command prompt. We specify what prompt we want to use as a string immediately following -p. For instance, let’s use the simple prompt ‘> ‘. Here’s how we’ll invoke ed:
ed -p'> '
Now when ed launches, we’ll see our prompt:
>
Adding text, and viewing it
We haven’t given ed a file name, so it starts us with an empty buffer to enter text. Let’s enter some now. We’ll use the a command to add text; in the commands below we’ll also show the prompt before the command, for clarity.
> a
Now we are given blank lines where we can type our text. We’ll enter it just like in any word processor, pressing enter at the end of each line. When we’re done, we’ll enter a period alone on a new line, to tell ed we’re done:
Line one, line two, line three, line four. .
We’ve entered four lines; the editor leaves off there, and gives us another ed command prompt. If we enter the p command, it will print the line where we left off editing:
> p
line four.
Most ed commands can be prefixed with an address range to specify what range to apply to the text. So, if we want to print lines 1 through 4, we could use the command 1,4p:
> 1,4p
Line one, line two, line three, line four.
If we omit the line numbers (but leave in the comma), ed will assume maximum start and end values, so it will print the whole buffer:
> ,p
Line one, line two, line three, line four.
In case we forget what line number we left off at, we can use the = command:
> =
4
We can continue to add lines using the a command again, and entering a period on a new line when we’re done:
> a
Line five. .
> ,p
Line one, line two, line three, line four. Line five.
We’re now at line 5:
> =
5
We can change to another line by entering that line number. When we do, ed will print that line to let us know where we are:
> 3
line three,
Now if we entered a, we’d start adding lines after line 3. Or we can use the i command to start inserting lines before line 3:
> i
This is the new line three. All lines after this are off by one! .
Let’s check to see where the editor leaves us after this insertion. This is known as where the buffer is “addressed,” and it should be the last line of the buffer:
> =
6
Let’s look at all six lines:
> ,p
Line one, line two, This is the new line three. All lines after this are off by one! line three, line four. Line five.
Let’s delete the third line using the d command. We’ll put a 3 before the d, to specify that line 3 is the line to be deleted:
> 3d
…and view the changed buffer:
,p
Line one, line two, line three, line four. Line five.
Se você deseja visualizar linhas com o número da linha no início, use o comando n . Por exemplo:
> n
5 Linha cinco.
> 3n
3 linha três,
> 2,4n
2 linha dois, 3 linha três, 4 linha quatro.
Para alterar uma linha (substitua-a completamente), você pode usar o comando c . Você pode inserir várias linhas de texto; portanto, ainda é necessário colocar um ponto em uma nova linha para indicar que você terminou:
> 3c
forre o terceiro, .
Também funciona em várias linhas:
> 1,2c
Primeira linha, segunda linha, .
> 4,5c
linha quatro .
E podemos juntar linhas com o comando j :
> 4,5j
Vejamos essas mudanças:
> , p
Primeira linha, segunda linha, forre o terceiro, linha quatro.
Compreendendo intervalos
Vamos explorar os intervalos um pouco mais. Vamos selecionar a linha 2 e imprimir uma linha antes e depois dela:
> 2
segunda linha,
> -1, + 1p
Primeira linha, segunda linha, forre o terceiro,
Já vimos que podemos especificar o buffer inteiro usando uma única vírgula como o intervalo (” , “):
> , p
Primeira linha, segunda linha, forre o terceiro, linha quatro.
Usamos uma única vírgula (” , “) para representar todo o intervalo de buffer em nossos comandos. Um sinal de porcentagem (” % “) fará a mesma coisa:
> % p
Primeira linha, segunda linha, forre o terceiro, linha quatro.
Ao especificar intervalos, podemos representar a última linha usando um cifrão (” $ “):
> 2, $ p
segunda linha, forre o terceiro, linha quatro.
If you don’t specify a range, most commands will assume a range of the currently-addressed line. You can also specify the currently-addressed line explicitly using a period (“.“):
> 2
second line,
> .
second line,
> .=
2
> .p
second line,
Marking lines for easier reference
You can mark a line using the k command, giving it a “marker” of any lowercase letter. You can then refer to the marked line using a single quote followed by that letter. For instance, here we mark line 3 with the letter a, then print that line by referring to it with ‘a:
> 3ka
> 'ap
line the third,
Moving and copying lines
You can move lines from one place to another using the m command:
> 1,2m3
> ,p
line the third, First line, second line, line four.
You can copy lines to another location using the t command:
> 2t4
> ,p
line the third, First line, second line, line four. First line,
Writing to and reading from files
When you’re ready to write to a file, you can use the f command to specify a file name:
> f myfile.txt
myfile.txt
We can now write to myfile.txt using the w command. ed will tell us how many bytes were written:
> w
64
If we specify a file name after w, ed will write to that file name, and tell us how many bytes:
> w myfile2.txt
64
To open a file for editing, use the e command with the name of the file you want to open. ed will read the file into the buffer, and let you know how many bytes were read in:
> e myfile.txt
64
If you try to open a file for editing when you have unsaved changes in your current buffer, you will receive an error. To open a file anyway, losing any unwritten changes to the current buffer, use a capital E:
> E myfile.txt
64
The same goes for exiting ed: if you try to use the q command to exit and you have unsaved changes, you’ll receive an error. To quit without writing your changes, use a capital Q:
> Q
To open a file from the command line, specify it as the last argument when invoking ed. The file will be read into the buffer, and ed will report how many bytes were read and give you a prompt for a command. For example:
ed -p'> ' myfile.txt
64 >
Searching for and replacing text
Let’s delete all the lines in our buffer and re-make the file before the next examples:
> ,d
> a
Twinkle, twinkle, little star. How I wonder what you are. Although I suspect you're mostly made of hydrogen. .
To search for text in your file, use the / command with the text to search for:
> /twinkle
Twinkle, twinkle, little star.
To globally run a command on lines matching a regular expression, use the command form g/regular-expression/command. For instance, here we’ll globally search for lines containing the consecutive letters “re“, and print those lines:
> g/re/p
How I wonder what you are. Although I suspect you're mostly made of hydrogen.
To run a command on the lines which do not match a given regular expression, use the command form v/regular-expression/command:
> v/re/p
Twinkle, twinkle, little star.
To perform text substitution, use the command form s/text-to-replace/replacement-text/. We’ll specify a range before the s so that it searches more than just the currently-addressed line:
> ,s/hydrogen/hydrogen and helium/
> ,p
Twinkle, twinkle, little star. How I wonder what you are. Although I suspect you're mostly made of hydrogen and helium.
Por padrão, apenas a primeira ocorrência de texto a substituir em uma linha será substituída. Para substituir todas as ocorrências em cada linha correspondente, especifique g após a segunda barra, para uma substituição “global”:
> , s / piscadela / wonk / g
> 1p
Twonkle, twonkle, estrelinha.
Conclusão
Espero que isso tenha lhe dado familiaridade suficiente com o ed para poder usá-lo e fazer uso das referências disponíveis acima. ed pode ser muito útil quando se trabalha em um sistema com o mínimo de recursos do sistema, ou quando reparar um sistema que não arranca além de um muito básico nível de execução . É o progenitor de muitos editores modernos e, quando você se acostuma, sua simplicidade pode facilitar a execução de tarefas básicas e importantes.
Comandos relacionados
bfs – Um editor que pode carregar arquivos muito grandes.
cat – gera o conteúdo de um arquivo.
editar – um editor de texto.
ex – modo editor de linha do editor detexto vi .
grep – Filtra o texto que corresponde a uma expressão regular.
ksh – O interpretador de comandos do shell Korn.
pico – Um simples editor de texto.
sed – Um utilitário para filtrar e transformar texto.
sh – O interpretador de comandos do Bourne shell.
stty – Defina opções para o visor do seu terminal.
umask – obtém ou define a máscara de criação do modo de arquivo.
vi – Editor de texto baseado no modo visual de ex.
vim – Uma versão avançada do vi .