コードブロックを含むマークダウンファイルがあります。
[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
```
他のすべての行をに置き換えるには、```bash
awkを使用する方が簡単です。
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-data
letを使用して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'