Bash 命令将一行文本拆分为 2 行

Bash 命令将一行文本拆分为 2 行

我想要文本文件的这一行

This is to become line 1 and that is line 2

分成两行,如下所示:

This is to become line 1
and that is line 2

请注意,我不想编辑/剪切/删除任何内容,不是单个字符,我只想最终得到两行文本而不是一行,并且能够决定应该在哪里进行分割。我该如何使用sedorawksplit来做到这一点?不太关心我使用哪一个,但sed如果可能的话,我更喜欢......

答案1

如果您试图在单词“and”处分割线,那么这将起作用。

echo "This is to become line 1 and that is line 2" | sed 's/and/\nand/g' 
This is to become line 1 
and that is line 2

请注意,您的里程可能会根据您使用的 sed 版本而有所不同。

更新:

为了进行分割,您只需在要用作第二行开头的术语/元素前面添加“\n”即可。

echo "Sun rise: <...strong...>07:24 am<../..strong..><..br ../..> Sun set: <..strong..>07:31 pm<../..strong..><..br.. /..> " | sed 's/Sun set/\nSun set/'
Sun rise: <...strong...>07:24 am<../..strong..><..br ../..> 
Sun set: <..strong..>07:31 pm<../..strong..><..br.. /..> 

答案2

我使用添加我的个人实现awk,这样您就可以separator根据需要更改。

echo "line 1 and line 2" | awk -v separator="and" 'BEGIN {FS=separator} $0 ~ separator {printf "%s\n%s%s", $1,FS,$2}'

我总是更喜欢使用,awk因为可以轻松使用变量。如果你想根据其他线分割你的线分隔符,您可以简单地将separator值更改为另一个值。

如果你想从第二行中删除separator(我的意思是你不想读“和2号线“, 但只有 ”2号线”):

echo "line 1 and line 2" | awk -v separator="and " 'BEGIN {FS=separator} $0 ~ separator {printf "%s\n%s", $1,$2}'

相关内容