AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 479835
Accepted
AbstProcDo
AbstProcDo
Asked: 2018-11-05 22:57:43 +0800 CST2018-11-05 22:57:43 +0800 CST 2018-11-05 22:57:43 +0800 CST

将双 ``` 对的开头 ``` 替换为 ```bash

  • 772

我有一个包含代码块的降价文件

在 [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为标记将由编辑器以彩色显示的 shell 脚本。

我尝试了答案。

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

但开口```没有被替换。

我怎样才能完成这样的任务?

text-processing
  • 4 4 个回答
  • 92 Views

4 个回答

  • Voted
  1. Stéphane Chazelas
    2018-11-06T01:12:50+08:002018-11-06T01:12:50+08:00

    要用替换每一```行```bash,使用 awk 可能更容易:

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

    要替换每一 ```行,那将是:

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

    当它是整个匹配时,无需显式捕获匹配(顺便说一句,\(...\)只有在启用某些实现(...)支持的扩展正则表达式后才能工作or ),因为无论如何都会捕获整个匹配。sed-E-r&

    不需要g旗帜。该g标志用于替换line 上的所有出现,但在这里,每行只能出现一次,因为我们使用 and 将模式锚定到该行的开头和^结尾$。

    使用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;}

    • 4
  2. Best Answer
    fra-san
    2018-11-06T00:11:33+08:002018-11-06T00:11:33+08:00

    已编辑

    该命令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-dataletsed将输入视为单行(实际上,由空字符分隔的行),然后查找 ```-text-``` 序列以将它们替换为 ```bash-text-```。

    • 2
  3. Henrik supports the community
    2018-11-06T00:04:45+08:002018-11-06T00:04:45+08:00

    我会尝试类似的东西

     perl -ple 'if (m/^```$/) { if (--$|) { s/$/bash/ } }' data.md
    
    • 1
  4. Romeo Ninov
    2018-11-05T23:18:52+08:002018-11-05T23:18:52+08:00

    您可以尝试对命令使用单引号sed:

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

    这用于避免从 bash 解释符号

    但根据你的文件,你最好使用类似的东西:

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

相关问题

  • grep 从 $START 到 $END 的一组行并且在 $MIDDLE 中包含匹配项

  • 重新排列字母并比较两个单词

  • 在awk中的两行之间减去相同的列

  • 多行文件洗牌

  • 如何更改字符大小写(从小到大,反之亦然)?同时[重复]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve