如何使用 sed 查找和替换看似制表符?

如何使用 sed 查找和替换看似制表符?

我有一行看起来像这样:

some.com    *.some.com

该空格看起来是一个制表符空格,因为当我移动键盘箭头时,一次移动就会将我移动到它的末尾(它似乎不是多个空格,因为多个空格需要我多次移动键盘箭头)。

这个空间给我带来了问题。我需要:

  1. 找到它是什么?

  2. 将其替换为单个空格。

这个怎么做?我尝试删除多个空格,但这似乎是无法删除的单个字符。

编辑:

只是附加信息。使用这一行的程序抱怨:Invalid control character

答案1

这是一个制表符。

tr -s '[:blank:]' ' ' <file >newfile

这将用于用tr单个空格替换文件中的任何制表符或空格。输出中的多个空格将被压缩为单个空格。结果写入到newfile.

要将单个制表符替换为单个空格,请使用

tr '\t' ' ' <file >newfile

答案2

在使用较少命令时显示 UNIX 中的特殊字符

要查看该字符是什么:

less -r sourcefile

或者

od -c sourceFile

以获得更详细的视图。

unix-linux-sed-ascii-control-codes-nonprintable

sed找出有问题的控制代码:

sed 's/'`echo "\033"`'/ /g'

where\033被替换为实际存在的内容。

答案3

你最终也可以使用这种方式

sed -E "s,[[:space:]]+, ,g" /tmp/test

这将用单个“空格”替换任何单个或多个“空白”(空格、制表符)

$ cat /tmp/test 
sdfsdfsdf    sdfsdfsdfsd
sdflksjdf    sdfélsdkfésldkf    ss

结果

$ sed -E "s,[[:space:]]+, ,g" /tmp/test 
sdfsdfsdf sdfsdfsdfsd
sdflksjdf sdfélsdkfésldkf ss

相关内容