小编rex*_*ans的帖子

为什么 wc <<<"$string" 显示的长度比 printf "$string" 长一个字节 | 厕所?

偶然地,我发现这wc取决于它如何从 bash 获取输入的不同:

$ s='hello'
$ wc -m <<<"$s"
6
$ wc -c <<<"$s"
6
$ printf '%s' "$s" | wc -m
5
$ printf '%s' "$s" | wc -c
5
Run Code Online (Sandbox Code Playgroud)

这是 - 恕我直言令人困惑 - 行为记录在某处吗?wc这里算什么- 这是一个假定的换行符吗?

bash newlines wc here-string

11
推荐指数
2
解决办法
3017
查看次数

带有 `&lt;` 和 `\?` 奇怪匹配的正则表达式

假设,有一个简单的测试 PHP 脚本:

<?php
$a = ($argc == 2 ? $argv[1] : 10);
for ($i = 0; $i < $a; $i++) {
  echo '.';
}
echo PHP_EOL;
Run Code Online (Sandbox Code Playgroud)

现在,我对文件执行 grep 或有条件的 sed:

grep '<' test.php
Run Code Online (Sandbox Code Playgroud)

产生包含<. 这很清楚。

grep '\?' test.php
Run Code Online (Sandbox Code Playgroud)

产生包含问号的两行。这很清楚。

grep '<\?' test.php
Run Code Online (Sandbox Code Playgroud)

返回所有行 - 为什么?我希望它只输出第一行。但也许,<应该被转义,这会产生另一个意想不到的输出。

sed -n '/pattern/p' test.php
Run Code Online (Sandbox Code Playgroud)

产生相同的结果。

我试图在https://regex101.com/上得到答案,但令我惊讶的是,该网站显示了我的期望。此外,一个快速而肮脏的 PHP 实现grep产生了我所期望的:

<?php
if (($fh = fopen($argv[2], 'r')) !== false) {
  while ($line = fgets($fh)) {
    if (mb_ereg($argv[1], $line) !== …
Run Code Online (Sandbox Code Playgroud)

grep sed regular-expression

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

标签 统计

bash ×1

grep ×1

here-string ×1

newlines ×1

regular-expression ×1

sed ×1

wc ×1