二重の「ペアの始まり」を「バス」に置き換えます。

二重の「ペアの始まり」を「バス」に置き換えます。

コードブロックを含むマークダウンファイルがあります。

[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フラグは、次の項目をすべて置き換えます。オンライン^ただし、ここではおよびを使用してパターンを行の先頭と末尾に固定するため、1行に1回しか表示できません$

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'

警告する:3つの逆引用符シーケンスの間に `(逆引用符)があると失敗します。

--null-dataletを使用してsed入力を単一の行(実際にはNULL文字で区切られた行)として処理し、次に「-text-」シーケンスを見つけて「bash-text-」に置き換えます。

答え3

私は次のことを試してみます。

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

答え4

次のコマンドで一重引用符を使用できますsed

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

これは Bash でシンボルの解釈を防ぐために使用されます。

しかし、ファイルによっては、次のようなものを使用する方が良いでしょう。

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

関連情報