使用 gnu sed 插入带有许多换行符的文本
Inserting text with many newlines with gnu sed
我有一个 mainfile.txt
包含
*
* Some text
*
使用命令
while read file; do gsed -i '1i'"$(cat mainfile.txt)" "$file";
我将 mainfile.txt 中的文本插入到每个符合某些条件的 file
的开头。但是,似乎 mainfile.txt 中的不同行造成了麻烦。错误显示 gsed: can't find label for jump to `o'
。当 mainfile.txt 仅包含一行时,不会发生此错误。在尝试寻找解决方案时,我只发现了如何在 sed 中插入新行,这并不是我想要的。
i
要求每一行以反斜杠结尾,最后一行除外。如果您的文件不是这种情况,它将不起作用。
ed
比非标准 sed -i
更适合 editing 文件,尽管如果您限制自己使用 GNU sed
/gsed
而不是 OS 提供的系统 sed
是什么,这不是什么问题。
使用任一命令,将一个文件的内容插入另一个文件的最佳解决方案是使用 r
命令代替 read 文件的内容在地址行之后进入缓冲区(它更像 a
而不是 i
):
printf "%s\n" "0r mainfile.txt" w | ed -s "$file"
不幸的是,sed
不像 ed
那样将地址 0 表示为“第一行之前”,因此在此处使用 r
更难。
当然,无需任何命令,只需将一个文件添加到另一个文件即可轻松完成:
cat mainfile.txt "$file" > temp.txt && mv -f temp.txt "$file"
或使用 moreutils 包中的 sponge(1)
:
cat mainfile.txt "$file" | sponge "$file"
这可能对你有用 (GNU sed):
sed -i '1ecat mainfile.txt' "$file"
仅在文件 $file
的第一行,评估命令 cat mainfile.txt
,然后正常打印所有行。
$file
将更新为 mainfile.txt
行。
替代方案,如果 $file
至少有 2 行:
sed -i -e '1h;1r mainfile.txt' -e '1d;2H;2g' "$file"
我有一个 mainfile.txt
包含
*
* Some text
*
使用命令
while read file; do gsed -i '1i'"$(cat mainfile.txt)" "$file";
我将 mainfile.txt 中的文本插入到每个符合某些条件的 file
的开头。但是,似乎 mainfile.txt 中的不同行造成了麻烦。错误显示 gsed: can't find label for jump to `o'
。当 mainfile.txt 仅包含一行时,不会发生此错误。在尝试寻找解决方案时,我只发现了如何在 sed 中插入新行,这并不是我想要的。
i
要求每一行以反斜杠结尾,最后一行除外。如果您的文件不是这种情况,它将不起作用。
ed
比非标准 sed -i
更适合 editing 文件,尽管如果您限制自己使用 GNU sed
/gsed
而不是 OS 提供的系统 sed
是什么,这不是什么问题。
使用任一命令,将一个文件的内容插入另一个文件的最佳解决方案是使用 r
命令代替 read 文件的内容在地址行之后进入缓冲区(它更像 a
而不是 i
):
printf "%s\n" "0r mainfile.txt" w | ed -s "$file"
不幸的是,sed
不像 ed
那样将地址 0 表示为“第一行之前”,因此在此处使用 r
更难。
当然,无需任何命令,只需将一个文件添加到另一个文件即可轻松完成:
cat mainfile.txt "$file" > temp.txt && mv -f temp.txt "$file"
或使用 moreutils 包中的 sponge(1)
:
cat mainfile.txt "$file" | sponge "$file"
这可能对你有用 (GNU sed):
sed -i '1ecat mainfile.txt' "$file"
仅在文件 $file
的第一行,评估命令 cat mainfile.txt
,然后正常打印所有行。
$file
将更新为 mainfile.txt
行。
替代方案,如果 $file
至少有 2 行:
sed -i -e '1h;1r mainfile.txt' -e '1d;2H;2g' "$file"