【问题标题】:Linux CentOS sed command with regex issues带有正则表达式问题的 Linux CentOS sed 命令
【发布时间】:2020-10-30 17:28:50
【问题描述】:

我在 CentOS 下有一个 txt 文件,我想将其中的任何 "\t\n" 替换为 "\t\t"。我试过这个:

sed -i -E 's/\t\n/\t\t/g' myfile.txt

但它不起作用。我不知道 CentOS 是否不支持 sed 中的正则表达式。

感谢任何帮助!

附言

输入(两行):

1\t2\t3\t$ 4\t5\t6\t$

输出(一行): 1\t2\t\3\t\t4\t5\t6\t\t

在 Editplus 中,查找正则表达式是 '\t\n' 而替换是 '\t\t'。那么所有以 '\t\n' 结尾的行都会变成一行,并且每个 '\n' 都会被一个额外的 '\t' 替换。

附言

我的文件是这样读取的 (cat -A myfile.txt)


【问题讨论】:

    标签: regex sed tabs carriage-return


    【解决方案1】:

    如果前一行只有一个制表符,您可以使用此perl 命令来连接行:

    perl -i -0777 -pe 's/(\S\t)\n(?!\z)/$1\t/g' excel.log
    

    (?!\z) 是对文件最后一行的匹配失败的否定前瞻。

    【讨论】:

    【解决方案2】:

    您需要转义反斜杠。

    sed -i -E  's/\\t\\n/\\t\\t/g' myfile.txt
    

    【讨论】:

    • 抱歉,此解决方案使文本文件保持不变。
    • @JonathanZhou 你有什么版本的 sed。我在具有 sed-4.5-1.el8.x86_64 的 CentOS 8 上试过这个。
    • 我也在使用 CentOS 8。但我不知道 sed 版本是什么。请告诉我什么命令告诉版本?
    • 刚看到你的更新,这只是替换文字字符。它不适用于您正在尝试做的事情。
    • 本质上是以\t\n结尾的多行。我想加入这些行并用另外一个 \t 替换 \n。在 Editplus 中,查找为 '\t\n' 并替换为 '\t\t'。然后它在 Editplus 中工作正常。
    猜你喜欢
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    • 2012-10-29
    • 2016-11-02
    • 1970-01-01
    相关资源
    最近更新 更多