相关疑难解决方法(0)

使用 sed 替换正则表达式捕获组内容

我正在尝试以编程方式编辑我的 nginx.conf 文件,其中包含如下一行:

        access_log /var/log/nginx/access.log;
Run Code Online (Sandbox Code Playgroud)

我想看起来像这样:

        access_log /dev/stdout;
Run Code Online (Sandbox Code Playgroud)

我相信正则表达式^\s*access_log([^;]*);会捕获/var/log/nginx/access.log捕获组中的部分,但我不确定如何用 sed 正确替换捕获组?

我试过了

echo "        access_log /var/log/nginx/access.log;" | sed 's/^\s*access_log([^;]*);/\1\\\/dev\\\/stdout/'
Run Code Online (Sandbox Code Playgroud)

但我收到错误:

sed: -e expression #1, char 45: invalid reference \1 on `s' command's RHS
Run Code Online (Sandbox Code Playgroud)

如果我尝试sed -r,则没有错误,但输出不是我所期望的:

 /var/log/nginx/access.log\/dev\/stdout
Run Code Online (Sandbox Code Playgroud)

我试图对捕获组和诸如此类的东西保持聪明,而不是直接搜索“access_log /var/log/nginx/access.log;” 以防分发更改默认日志文件位置。

sed

29
推荐指数
3
解决办法
7万
查看次数

vim 搜索包含特定位数的数字

我需要在一个大文档中找到特定的长度数字。我尝试为此使用正则表达式。例如,如果我需要搜索正好为 2 位的数字,我会使用\d\d(即 /d 两次后跟一个空格)。这很好用。

但是要找到 10 位数字,输入\d10 次实际上并不可行。

试过\d{2},说' E486:找不到模式:\d{2} '

有没有更快/更容易的方法来实现这一目标?

vim search regular-expression

27
推荐指数
2
解决办法
5万
查看次数

使用与 GNU grep -P 兼容的 perl 正则表达式

我在(?<=\[')[^,]*包含以下行的文件上使用此正则表达式disk = ['OVS/sdasd/asdasd/asdasd/something.img, w']

我想让它回来 OVS/sdasd/asdasd/asdasd/something.img

我如何使用grep才能使其工作?

我试过,grep -P "(?<=\[')[^,]*"但它返回整行。

grep regular-expression

12
推荐指数
2
解决办法
4万
查看次数

如何交换字符串中每两个字符对的顺序?

我正在尝试在任意长度的十六进制字符字符串中自动交换字符 1 和 2、3 和 4 等。

例子:

A627E39B
Run Code Online (Sandbox Code Playgroud)

变成:

6A723EB9
Run Code Online (Sandbox Code Playgroud)

使用 sed 或其他 *nix 文本实用程序之一似乎应该可以做到这一点,但到目前为止我还没有找到任何示例。

sed awk text-processing

3
推荐指数
1
解决办法
2704
查看次数

模式重复和正则表达式

拿图案

[UGLER]*
Run Code Online (Sandbox Code Playgroud)

字符串 UUG 可以匹配它吗?我的意思是说,允许重复吗?

regular-expression

1
推荐指数
1
解决办法
251
查看次数

标签 统计

regular-expression ×3

sed ×2

awk ×1

grep ×1

search ×1

text-processing ×1

vim ×1