이중 ```` 쌍의 시작 ````을 ````bash로 바꾸십시오.

이중 ```` 쌍의 시작 ````을 ````bash로 바꾸십시오.

코드 블록이 포함된 마크다운 파일이 있습니다.

[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

```시작(삼중 동굴)을 ```bash편집자가 색상으로 시연할 마크업 셸 스크립트 로 바꾸고 싶습니다 .

나는 대답을 시도했다.

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

그러나 개구부는 ```교체되지 않았습니다.

그러한 작업을 어떻게 수행할 수 있습니까?

답변1

```다른 모든 줄을 로 바꾸려면 ```bashawk를 사용하는 것이 더 쉬울 수 있습니다.

awk '$0 == "```" && alt = 1 - alt {$0 = "```bash"}; {print}' < file

바꾸다모든 ```즉, 다음과 같습니다.

sed 's/^```$/&bash/'

전체 일치 항목인 경우 일치 항목을 명시적으로 캡처할 필요가 없습니다(그런데 ; 로 수행되며 \(...\)일부 or 구현(...) 에서 지원하는 확장 정규식을 사용하는 경우에만 작동함). 전체 일치 항목이 캡처되기 때문입니다.sed-E-r&

플래그가 필요 하지 않습니다 g. 이 g플래그는 다음 항목을 모두 대체합니다.온라인^, 그러나 여기서는 및 를 사용하여 패턴을 줄의 시작과 끝 부분 에 고정하기 때문에 줄당 한 번만 나타날 수 있습니다 $.

sed교체하다그 외 모든 것들줄에서 다음과 같이 할 수 있습니다.

sed '
  /^```$/ {
    s//&bash/;:1
    n;//!b1
  }'

한 줄:

sed -e '/^```$/ {s//&bash/;:1' -e 'n;//!b1' -e '}'

GNU 구현을 사용하면 sed이를 다음과 같이 단축할 수 있습니다.

sed '/^```$/{s//&bash/;:1;n;//!b1}'

(그러나 이것은 POSIXly 표준 구문이 아니며, sed또는 명령 뒤에 코드가 있을 수 없으며 그 앞에는 또는 개행 문자가 있어야 합니다.):b;}

답변2

편집하다

sed 's/^(```)/(```bash)/g'괄호는 문자 그대로 해석되므로 이 명령은 작동하지 않습니다.
아래와 같이 괄호를 피해야 할 수도 있습니다.

$ sed 's/^\(```\)/```bash/g'

또는 확장 정규식을 활성화할 수 있습니다.

$ sed -E  's/^(```)/```bash/g'

이렇게 하면 괄호를 벗어날 필요가 없습니다.

또는 괄호만 제거하세요.

$ echo '```' | sed 's/^```/```bash/g'
```bash

시작 부분만 일치시키려면 ```다음과 같은 정규식을 사용할 수 있습니다.

$ sed --null-data -E 's/[`]{3,3}([^`]*)([`]{3,3}){0,1}/```bash\1\2/g'

경고하다: 세 개의 역따옴표 시퀀스 사이에 `(역따옴표)가 있으면 실패합니다.

--null-datalet을 사용하여 sed입력을 단일 라인(실제로는 널 문자로 구분된 라인)으로 처리한 다음 ``-text-`` 시퀀스를 찾아 ``bash-text-``로 대체합니다.

답변3

나는 다음과 같은 것을 시도 할 것입니다

 perl -ple 'if (m/^```$/) { if (--$|) { s/$/bash/ } }' data.md

답변4

다음 명령에서 작은따옴표를 사용해 볼 수 있습니다 sed.

sed 's/^(```)/(```bash)/g'

이는 Bash에서 기호 해석을 방지하는 데 사용됩니다.

그러나 파일에 따라 다음과 같은 것을 사용하는 것이 더 나을 것입니다.

sed 's/^```/```bash/g'

관련 정보