我的文件中有以下文本:
#1713251479
sh lowbat.sh
#1713251495
nvim lowbat.sh
#1713252186
sh lowbat.sh
我想将 Unix 时间戳与命令内联,如下所示:
#1713251479 sh lowbat.sh
#1713251495 nvim lowbat.sh
#1713252186 sh lowbat.sh
我尝试了以下 sed 命令:
sed -zE '/^#/ s/\n/ /g' file.txt
sed -E ':a;N;$!ba;/^#/ s/\n/ /g' file.txt
应用了替换操作,但忽略了条件,我在这里缺少什么?
在这两次尝试中,您将整个文件读入编辑缓冲区,然后用空格替换所有换行符(文本将以 开头
#
,因此在两种情况下都会触发替换并在整个缓冲区上执行)。这不会生成正确的输出,因为它将所有文本收集到单个输出行上。使用
paste
它来创建两个制表符分隔的列。该实用程序会将一行输入与其-
参数中的每一行相匹配:如果您想使用空格代替制表符,请使用
paste
with-d ' '
:使用,将下一行追加到当前缓冲区,并用空格替换用于分隔两行
sed
的换行符:sed
#
您是否希望以行开头的字符为条件来连接行:使用
ed
,您可以应用替换以在以 开头的每行末尾添加一个空格#
,然后使用以下命令将下一行连接到其末尾j
:下面的工作原理是,在开头添加空格后,将每行不以 a 开头的行连接到上一行。
#
这会将所有行连接到以 开头的最新行#
(该示例已更改为显示此示例的一个实例)。