13

我想使用sed从其他空白行中删除标签。例如,仅包含的行\t\n应更改为\n. 这个的语法是什么?

4

6 回答 6

25

sed不知道转义序列,如\t. 因此,您必须tab在控制台上逐字输入 a:

sed 's/^    *$//g' <filename>

如果您使用 bash,则无法tab在控制台上键入。您将不得不做^V,然后按tab。(Ctrl-V然后tab) 打印一个文字标签。

于 2011-09-26T17:09:42.287 回答
2

要用空行替换任意空白行,请使用

sed -r 's/^\s+$//'

-r 标志表示使用扩展的正则表达式,并且 ^\s+$ 模式匹配所有带有一些空格但没有其他字符的行。

于 2011-09-26T17:19:29.117 回答
1

当该行中有 1 个(并且只有 1 个)选项卡时,另一个发布的解决方案将起作用。请注意,Raze2dust 指出 sed 要求您键入文字选项卡。另一种选择是:

sed '/[^      ]/!s/   //g' file-name.txt

从只有制表符的行中替换制表符。倒置类匹配包含任何错误选项卡的行 - 以下'!' 导致它与那些行不匹配 - 仅表示只有制表符的行。然后替换仅在这些行上运行,删除所有选项卡。

于 2011-09-26T17:17:03.740 回答
0

我注意到 \t 不被 UNIX 识别。话虽如此,请使用实际密钥。在下面的代码中,TAB 代表按 Tab 键。

$ sed 's/TAB//g' 旧文件 > 新文件

友情提示:为确保您尝试删除标签的文件中有标签,请使用以下代码查看是否出现 \t

$ od -c 文件名

于 2014-04-20T22:53:51.293 回答
0

对我有用的是:


sed -r '/^\s+$/d' my_file.txt > output.txt
于 2021-12-07T15:02:25.833 回答
-2
grep -o ".*" file > a; mv a file;
于 2013-12-28T12:23:59.947 回答