标签: control-characters

确定标签 '\t' 在一行上的长度

在文本处理字段中,有没有办法知道制表符的长度是 8 个字符(默认长度)还是更少?

例如,如果我有一个带有制表符分隔符的示例文件,并且一个字段的内容适合少于一个制表符 (?7),并且如果我之后有一个制表符,那么该制表符将只是“制表符大小 – 字段大小” '的长度。

有没有办法获得一行上标签的总长度?我不是在寻找标签的数量(即 10 个标签不应该返回 10),而是这些标签的字符长度。

对于以下输入数据(字段之间的制表符分隔且只有一个制表符):

field0  field00 field000        last-field
fld1    fld11   fld001  last-fld
fd2     fld3    last-fld
Run Code Online (Sandbox Code Playgroud)

我希望计算每行中标签的长度,所以

11
9
9
Run Code Online (Sandbox Code Playgroud)

text-processing control-characters

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

为什么 ^M 和 \r 表现不一致?

也许已经有一些答案可以间接回答我的问题,但我已经阅读了很多,但尚未找到对这种差异的满意答案。

回车的本义来自老式电传打字机:它的意思是将打印头在当前行中向左移动。如果您继续在当前行写入,您将覆盖已经写入的内容。如今,我们可以使用文本符号来指定这种行为\r,它是在字符串中明确输入的。例如,在 Python 中您可以执行print('hello\rgoodbye'),而在终端中您可以执行echo $'hello\rgoodbye',并且在这两种情况下您都只会看到goodbye.

相比之下,伪回车也可以与 ASCII 控制字符^M(用Ctrl-M或键入Enter)交互插入。我称它为伪回车是因为尽管它被广泛称为回车\r,但令人惊讶的是它没有 insert ,而是 inserts \n,这是换行的符号。

因此,交互式键入hello, then Ctrl-M, thengoodbye出人意料地没有达到 的等价物hello\rgoodbye,而是相当于hello\ngoodbye.

这不是很矛盾吗?这背后的原理是什么?

terminal-emulator terminal history ascii control-characters

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

gnome-terminal:Alt 键上的奇怪控制字符

我可能配置错误,但我不知道是什么。(请参阅下面的更新 1 和 2)在 中gnome-terminal,当我点击Alt(没有任何其他键)时,它会立即发送^[<到终端(我通过点击Ctrl+V之前进行了测试Alt)。由于我经常使用Alt+ Tab,这是非常不幸的,因为控制序列会,例如,移动到历史的开头或在vim. 该Alt+ Tab,然而,这仍然可以通过窗口工作,并循环通缉。

可能是什么原因以及如何恢复 gnome-terminal 中的默认行为?

  • 操作系统:Linux Mint 19.3 Tricia x86_64
  • 内核:5.3.0-24-generic
  • 外壳:bash 4.4.20
  • GNOME 终端 3.28.1 使用 VTE 0.52.2 +GNUTLS -PCRE2

更新 1

我发现这仅发生在笔记本电脑键盘本身上,而不是使用外部连接的 USB 键盘。虽然连接了外部键盘,但两个 -Alt键的行为不同。

笔记本电脑是联想P53。

我仍然不知道如何为笔记本电脑键盘修复它,但至少我更接近问题的根源。

更新 2 运行xev我很快击中(按下并立即释放)Alt一次;首先在笔记本电脑键盘上,然后在外部 USB 键盘上:

# LAPTOP KEYBOARD ALT-KEY

MappingNotify event, serial 39, synthetic NO, window 0x0,
    request …
Run Code Online (Sandbox Code Playgroud)

keyboard gnome-terminal control-characters

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

如何查找文件中的控制字符?

我想找到我的文件中有哪些控制字符。我不搜索特定字符,但有可能\t\n。我有一个程序告诉我:Invalid control character。但当我打开文件时,我看不到任何东西。如何展现这些人物形象呢?我怀疑\nor\t或 一些添加空格的字符。

我尝试过:grep '\n' myfile.txt但在输出中它标记了该n字母。

grep control-characters

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

什么决定退格符是否出现在用 cat 创建的文件中?

我刚刚注意到,在通过cat和重定向创建快速测试文件(例如,使用示例输入)时,我在不同的系统上看到了不同的行为。

以下是了解我在说什么的步骤:

运行cat > testfile

输入helli,然后按退格键,然后输入o

按 Enter。

键入 Ctrl-D 结束输入。

运行od -a testfile

在某些系统上,例如 Mac,您将获得:

0000000    h   e   l   l   o  nl                                        
0000006
Run Code Online (Sandbox Code Playgroud)

在其他系统上,例如我通过 Windows 上的 MobaXterm 登录的 RHEL 5.7 主机,您可能会得到:

0000000    h   e   l   l   i  bs   o  nl                                        
0000010
Run Code Online (Sandbox Code Playgroud)

造成这种差异的代码在哪里?例如,在上面的例子中,我应该怀疑 MobaXterm,还是 RHEL 5 系统?或者我的键盘和文件系统之间的哪一层?


这与其说是一个真正的问题,不如说是一个出于好奇的问题;我显然可以通过使用文本编辑器来创建没有退格字符的文件,但这在过去让我感到困惑。有一次在一次随意的演示/培训期间,我提到通过创建文件cat存在这个问题,退格字符被逐字取用,只是在学生使用的 Mac 上根本没有这种效果时才会显示错误 所以这让我很好奇。

io-redirection tty cat control-characters

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

`cat -v` 用于非打印非 ASCII UTF 字符

cat有一个-v选项可以将非打印字符转换为插入符号(如果我们不希望终端在cat输出中按字面解释控制字符,这很有用)。

但据我了解,脱字符号仅适用于 ASCII 字母表中的非打印字符。那么,UTF 中不属于 ASCII 的非打印字符(例如https://www.compart.com/en/unicode/category/Cc)又如何呢?将使用什么符号cat -v来显示这些?

unicode cat control-characters

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

角色要去哪里?

在有效的shell \\u(bash +4.3、ksh93 或 zsh)中,我们可以打印 Unicode 字符:

\n
$ printf \'a b c \\ua0 \\ua1 \\ua2 \\ua3 \\n\'\na b c   \xc2\xa1 \xc2\xa2 \xc2\xa3\n
Run Code Online (Sandbox Code Playgroud)\n

这是Latin-1_Suplement范围中的一些字符。

\n

然而,一旦9f添加了 Unicode 字符,打印就会停止,直到打印出 Unicode 9c

\n

\\u9f\\u9cAPC 和 ST)都是C1控制字符

\n
$ printf \'a b c \\u9f d e f \\u9c \\ua0 \\ua1 \\ua2 \\ua3 \\n\'\na b c  \xc2\xa0 \xc2\xa1 \xc2\xa2 \xc2\xa3 \n
Run Code Online (Sandbox Code Playgroud)\n

角色肯定会消失。

\n

可以肯定的是,它printf正在生成所有字符,并且将输出重定向到其他软件(而不是终端)将显示生成的字符:

\n
$ printf …
Run Code Online (Sandbox Code Playgroud)

shell bash terminal control-characters

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