相关疑难解决方法(0)

有一种简单的方法可以将"原始"字符串传递给grep吗?

grep从命令行使用时不能输入"原始"字符串,因为某些字符需要转义才能被视为文字.例如:

$ grep '(hello|bye)' # WON'T MATCH 'hello'
$ grep '\(hello\|bye\)' # GOOD, BUT QUICKLY BECOMES UNREADABLE
Run Code Online (Sandbox Code Playgroud)

printf用来自动转义字符串:

$ printf '%q' '(some|group)\n'
\(some\|group\)\\n
Run Code Online (Sandbox Code Playgroud)

这会生成字符串的bash-escaped版本,并且使用反引号,可以很容易地将其传递给grep调用:

$ grep `printf '%q' '(a|b|c)'`
Run Code Online (Sandbox Code Playgroud)

但是,它显然不适用于此:输出中的某些字符不会被转义,而有些则不必要.例如:

$ printf '%q' '(^#)'
\(\^#\)
Run Code Online (Sandbox Code Playgroud)

^传递给角色时,不应该逃脱grep.

是否有一个cli工具,它接受一个原始字符串并返回一个bash-escaped版本的字符串,可以直接用作grep的模式?如果没有,我怎么能用纯粹的bash来实现呢?

bash grep escaping command-line-interface

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

谁定义正则表达式?

W3C定义了HTML标准,CSS标准和一些其他标准.我知道还有其他团体也定义了标准.谁定义了正则表达式的语法?

regex standards

31
推荐指数
5
解决办法
933
查看次数

Bash正则表达式 - 似乎无法匹配\ s,\ S等

我有一个脚本试图从gparted获取信息块.

我的数据看起来像:

Disk /dev/sda: 42.9GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system     Flags
 1      1049kB  316MB   315MB   primary  ext4            boot
 2      316MB   38.7GB  38.4GB  primary  ext4
 3      38.7GB  42.9GB  4228MB  primary  linux-swap(v1)

log4net.xml
Model: VMware Virtual disk (scsi)
Disk /dev/sdb: 42.9GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system     Flags
 1      1049kB  316MB   315MB   primary  ext4            boot
 5      316MB   38.7GB  38.4GB  primary  ext4
 6      38.7GB  42.9GB  4228MB …
Run Code Online (Sandbox Code Playgroud)

regex bash

13
推荐指数
2
解决办法
3万
查看次数

正则表达式从字符串中提取前3个单词

我试图替换除String中前3个单词之外的所有单词(使用textpad).

防爆值: This is the string for testing.

我想只提取3个单词:This is the从上面的字符串中删除所有其他单词.

我想出正则表达式匹配3个单词(\w+\s+){3}但我需要匹配除前3个单词之外的所有其他单词并删除其他单词.有人可以帮我吗?

regex

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

为什么我的无效模式没有抛出 PatternSyntaxException?

我想测试一个正则表达式在 Java 1.8.0_241 中是否有效

public static boolean isRegExpValid(String regExp) {
    try {
        Pattern.compile(regExp);
        return true;
    } catch (PatternSyntaxException e) {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

在这里,我正在测试三位数的正确正则表达式和不正确的正则表达式。

@Test
public void testValidRegexp() {
    assertTrue(isRegExpValid("\\d{3}"));
}

@Test
public void testInvalidRegexp() {
    assertFalse(isRegExpValid("{3}"));
}
Run Code Online (Sandbox Code Playgroud)

为什么我的第二次测试testInvalidRegexp失败了?isRegExpValid("{3}")应该返回false,但返回true。

在 Javascript 中,{3}正确失败并显示Nothing to repeat异常。 在此处输入图片说明

java regex unit-testing patternsyntaxexception

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