Eu tenho um arquivo markdown que contém blocos de código como
Em [310]: !cat data.md
**File Permission Related Commands**
These commands are used to change permissions of the files
```
72. chmod octal file-name : Changes the permissions of file to octal
chmod 777 /data/test.c : Sets rwx permission for owner , group and others
```
**Network Related Commands**
These commands are used to view and edit network configurations related aspects of the system
```
75. ifconfig -a : Displays all network interface and set ip address
76. ifconfig eth0 : Displays eth0 ethernet port ip address and details
```
**Compression / Archive Related Commands**
These commands are used to compress and decompress files
```
89. tar cf home.tar home : Creates a tar named home.tar containing home/
tar xf file.tar : Extracts the files from file.tar
tar czf file.tar.gz files : Creates a tar with gzip compression
Eu gostaria de substituir a abertura ```
(tripla cavet) ```bash
para marcar o shell script que será demonstrado em cores pelo editor.
Eu tentei a resposta.
In [327]: !sed 's/^(```)/(```bash)/g' data.md
**File Permission Related Commands**
These commands are used to change permissions of the files
```
72. chmod octal file-name : Changes the permissions of file to octal
chmod 777 /data/test.c : Sets rwx permission for owner , group and others
mas a abertura ```
não é substituída.
Como eu poderia realizar tal tarefa?
Para substituir todas as outras
```
linhas por```bash
, provavelmente é mais fácil com awk:Para substituir todas as
```
linhas, isso seria:Não há necessidade de capturar explicitamente a correspondência (que, por sinal, é feito com
\(...\)
;(...)
só funcionaria depois de habilitar expressões regulares estendidas, conforme suportado por algumassed
implementações com-E
ou-r
) quando é a correspondência inteira, pois a correspondência inteira é capturada de&
qualquer maneira.Não há necessidade de uma
g
bandeira. Og
sinalizador é para substituir todas as ocorrências na linha , mas aqui pode haver apenas uma ocorrência por linha, pois estamos ancorando o padrão no início e no final da linha com^
e$
.Com
sed
, para substituir todas as outras linhas, você poderia fazer:Em uma linha:
Com a implementação GNU de
sed
, você pode encurtá-lo para:(mas essa não é uma
sed
sintaxe padrão como POSIXly, você não pode ter nenhum código após os comandos:
oub
e precisa haver um;
ou nova linha antes}
de ).EDITADO
O comando
sed 's/^(```)/(```bash)/g'
não funciona porque os colchetes são interpretados literalmente.Você provavelmente tem que escapar dos colchetes como em
Como alternativa, você pode habilitar expressões regulares estendidas:
para que os colchetes não precisem ser escapados.
Ou, apenas remova os colchetes:
Para corresponder apenas à abertura
```
, você pode usar um regexp como este:Advertência : Falha se um ` (backtick) for encontrado entre sequências de backticks triplos.
Ele usa
--null-data
para deixarsed
tratar a entrada como uma única linha (na verdade, linhas separadas por caracteres nulos) e então procura por sequências de ```-text-``` para substituí-las por ```bash-text-```.eu tentaria algo como
Você pode tentar usar aspas simples para o
sed
comando:Isso é usado para evitar a interpretação dos símbolos do bash
Mas com base no seu arquivo é melhor você usar algo como: