如何使用 sed 从空行中删除制表符?
我想使用 sed 从空白行中删除制表符。例如,仅包含 \t\n
的行应更改为 \n
。 这个的语法是什么?
I'd like to use sed to remove tabs from otherwise blank lines. For example a line containing only \t\n
should change to \n
. What's the syntax for this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
sed
不知道像\t
这样的转义序列。因此,您必须在控制台上逐字键入tab
:如果您使用的是 bash,则无法在控制台上键入
tab
。您必须执行^V
,然后按tab
。 (Ctrl-V
然后tab
)打印文字选项卡。sed
does not know about escape sequences like\t
. So you will have to literally type atab
on your console:If you are on bash, then you can't type
tab
on the console. You will have to do^V
and then presstab
. (Ctrl-V
and thentab
) to print a literal tab.当该行中有 1 个(且只有 1 个)选项卡时,另一个发布的解决方案将起作用。请注意,Raze2dust 指出 sed 要求您输入文本制表符。另一种方法是:
将只有制表符的行中的制表符替换掉。反向类匹配包含任何选项卡错误的行 - 下面的“!”导致它与这些行不匹配 - 意味着只有制表符的行。然后,替换仅在这些行上运行,删除所有选项卡。
The other posted solution will work when there is 1 (and only 1) tab in the line. Note that Raze2dust points out that sed requires you to type a literal tab. An alternative is:
Which substitues away tabs from lines that only have tabs. The inverted class matches lines that contain anything bug a tab - the following '!' causes it to not match those lines - meaning only lines that have only tabs. The substitution then only runs on those lines, removing all tabs.
要将任意空白行替换为空行,请使用
-r 标志表示使用扩展正则表达式,并且 ^\s+$ 模式匹配具有一些空白但没有其他字符的所有行。
To replace arbitrary whitespace lines with an empty line, use
The -r flag says to use extended regular expressions, and the ^\s+$ pattern matches all lines with some whitespace but no other characters.
对我有用的是:
What worked for me was:
我注意到 UNIX 不识别 \t。话虽如此,请使用实际的密钥。在下面的代码中,TAB代表按下Tab键。
$ sed 's/TAB//g' oldfile > newfile
友好提示:为了确保您尝试删除选项卡的文件中有选项卡,请使用以下代码查看 \t 是否出现
$ od -c filename
I've noticed \t is not recognized by UNIX. Being said, use the actual key. In the code below, TAB represents pressing the tab key.
$ sed 's/TAB//g' oldfile > newfile
Friendly tip: to ensure you have tabs in the file you are trying to remove tabs from use the following code to see if \t appears
$ od -c filename