我需要引用行尾并使用此解决方案替换行尾,当文件有多行时它可以完美地工作。
当我尝试将此方法用于没有\n
或单行以\n
. 在这种情况下sed
不会替换任何东西,即使第二个s/
命令也不起作用。也看起来像最后一行永远不会被替换。
我的命令是:
sed ':a;N;$!ba;s/\n/\\n/g;s/a/_/g' <file>
(例如替换\n
为\\n
和替换a
为_
)。
我用来hexdump -C
在这里显示文件:
我做了一些测试:
$ # Test1. single line without \n
$ echo -n 'abc' | sed ':a;N;$!ba;s/\n/\\n/g;s/a/_/g' | hexdump -C
00000000 61 62 63 |abc|
# but expected "_bc"
$ # Test2. single line with \n
$ echo 'abc' | sed ':a;N;$!ba;s/\n/\\n/g;s/a/_/g' | hexdump -C
00000000 61 62 63 0a |abc.|
# but expected "_bc\n"
$ # Test3. two lines
$ echo -e 'abc\n' | sed ':a;N;$!ba;s/\n/\\n/g;s/a/_/g' | hexdump -C
00000000 5f 62 63 5c 6e 0a |_bc\n.|
# but expected "_bc\n\n"
问题:为什么 seconds/
不能替换 Test1 和 Test2 中的任何内容?有什么方法可以修复所有这些测试的替换s/\n/\\n/
和替换?s/a/_/g
PS:我不想要一些解决方法,例如在 sed 处理之前在流末尾添加换行符并在之后删除它。
编辑:看起来N
命令不读取单行,即使它后面跟着'\ n'。知道如何解决吗?