如何在sed中删除保留空间的第一行?
我尝试过以下命令:
x;
s/.*\n//;
x;
但是.*\n
匹配到最后一个换行符,删除除最后一行以外的所有内容。
如何在sed中删除保留空间的第一行?
我尝试过以下命令:
x;
s/.*\n//;
x;
但是.*\n
匹配到最后一个换行符,删除除最后一行以外的所有内容。
这应该从“保留空间”中删除第一行。
x;s/[^\n]*\n//
例子:
kent$ sed -n 'H;${x;p}' <(seq 3)
1
2
3
kent$ sed -n 'H;${x;s/[^\n]*\n//;p}' <(seq 3)
1
2
3
$ sed -n 'H;${x;s/[^\n]*\n//;p;}' <(seq 3)
输出 3
。我认为它将 [^\n]
解释为“不匹配 \
或 n
”。有什么方法可以规避这个问题吗? - kalanchloe\n
解释为单个换行符。但是,你想通过去掉一行来实现什么目的?也许你需要将文件读入hold(如果它适合的话),然后简单地搜索替换你想要去掉的行,并将其交换回来。 - user4401178H
命令,因此可以安全地删除第一个字符 (s/.//
) 以实现相同的结果。要删除保留空间/模式空间中的第一行,则需要按照所述方式删除零个或多个非换行符,然后是换行符 (s/^[^\n]*\n//
)。 - potong\n
解释为换行符。这种行为在POSIX标准中是未定义的。所有符合POSIX标准的sed命令都会将反斜杠后跟一个字面上的换行符识别为换行符。不过,这根本不是sed的工作,所以这只是学术上的问题。 - Ed Morton转义序列“\ n”应匹配模式空间中嵌入的<newline>。 BRE中不应使用上下文地址或替换函数的文字<newline>。
2008版的修订也是这样说的。 - Kamil Maciorowski简单地放置任何随机字符串与h
,例如1h;1d
,默认为空。